有人能告诉我这个操作怎么会“sar”为负数?
答案 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时)。