Java中的无符号移位操作

时间:2016-05-18 07:36:05

标签: java bit unsigned

enter image description here

有人能告诉我这个操作怎么会“sar”为负数?

1 个答案:

答案 0 :(得分:4)

在应用移位运算符之前,

data[0]被提升为int

因此,例如,data[0]是-128,

您正在对int -128应用shift,其二进制表示为:

11111111 11111111 11111111 10000000

这导致

00000011 11111111 11111111 11111110

在您将其转回byte之后,您最终会得到一个负数

                           11111110 (-2)

如果你想忽略因int推广而添加的1位,你可以写:

byte sar = (byte) ((data[0]&0xff)>>>6);

这将导致2(当data[0]为-128时)。