本帖最后由 孙传磊 于 2013-2-28 19:37 编辑
刘凯 发表于 2013-2-28 16:26
如楼上所说 :“由于无符号右移运算符>>>只是对32位和64位的值有意义。因为要记住,在表达式中过小的值总 ...
java里就是这样规定的,下面的例子说明了这一点:
public class ByteShift {
public static void main(String[] args) {
char hex[]={'0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F'};
byte b=(byte) 0xf1;
byte c=(byte) (b>>4);
byte d=(byte) (b>>>4);
byte e=(byte) ((b & 0xff)>>4);
System.out.println(" b=0x"+hex[(b>>4) & 0x0f]+hex[b & 0x0f]);
System.out.println(" b>>4=0x"+hex[(c>>4) & 0x0f]+hex[c & 0x0f]);
System.out.println(" b>>>4=0x"+hex[(d>>4) & 0x0f]+hex[d & 0x0f]);
System.out.println("(b & 0xff)>>4=0x"+hex[(e>>4) & 0x0f]+hex[e & 0x0f]);
}
}
输出结果:
b=0xF1
b>>4=0xFF
b>>>4=0xFF
(b & 0xff)>>4=0x0F
该程序的输出显示了无符号右移运算符>>>对byte型值处理时,实际上不是对byte型值直接操作,而是将其扩大到int型后再处理 |