我知道,在Java中,byte类型在进行右移操作之前,会首先转换为int类型。
因此,在Java中,我们将得到一个不正确的答案,用于byte类型的 >>> 操作。
例如:
byte b=(byte)0xf1;
byte c=(byte)(b>>4);
byte d=(byte)(b>>>4);
byte e=(byte)((b&0xff)>>4);
D的答案等于C。但是E的答案是正确的。我想不出原因。
谢谢
e=(byte)((b&0xff)>>4);
隐式转换为int: (int)b = 1111 .... .... 1111 0001
与0xff进行AND运算: x&0xff = 0000 .... 0000 1111 0001
进行右移操作: (b&0xff)>>4 = 0000 .... 0000 1111
显式转换为byte: e = 0000 1111
你已经回答了自己的问题:“在进行右移操作之前,首先将其转换为int类型”,因此
byte e=(byte)((b&0xff)>>4);
首先
b -> int => 0xfffffff1
然后
0xfffffff1 & 0xff => 0xf1
那么
0xf1 >> 4 => 0xf