public class RightByteShift {
public static void main(String[] args) {
/*
* 注意下面的结果,无论-1右移多少位,它的结果始终是-1。 因为符号扩展在高阶位中引进了更多的1。
* 什么是符号扩展?答案是:右移时,空出的最高位(最左边) 由原来的最高位内容填充。这被称作“符号扩展”,在进行 右移时用来保持负数的符号。
*/
System.out.println("-1>>1 = " + (-1 >> 1));
System.out.println(HexByte.toHexString((byte) 2));
}
}
/**
* 把一个byte转换成十六进制表示 <br>
* 注意,右移后的值与0x0f进行按位与操作,目的是将扩展位符号丢弃
*
* @author Jenson
*
*/
class HexByte {
private static char[] hex = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F' };
public static String toHexString(byte b) {
return new StringBuilder("0x").append(hex[(b >> 4) & 0x0f])
.append(hex[b & 0x0f]).toString();
}
}