【发布时间】:2016-05-18 07:36:05
【问题描述】:
谁能告诉我这个操作如何导致“sar”为负数?
【问题讨论】:
-
因为这是
data[0] >>> 6的结果。
谁能告诉我这个操作如何导致“sar”为负数?
【问题讨论】:
data[0] >>> 6的结果。
data[0] 在应用移位运算符之前被提升为int。
因此,例如,如果data[0] 为 -128,
您正在对 int -128 应用移位,其二进制表示为:
11111111 11111111 11111111 10000000
这导致
00000011 11111111 11111111 11111110
在你把它转换回byte 之后,你最终得到一个负数
11111110 (-2)
如果您想忽略因 int 提升而添加的 1 位,您可以这样写:
byte sar = (byte) ((data[0]&0xff)>>>6);
这将导致 2(当 data[0] 为 -128 时)。
【讨论】: