byte x = -1;
for(int i = 0; i < 8; i++)
{
x = (byte) (x >>> 1);
System.out.println("X: " + x);
}
据我了解,java将数据存储在二进制补码中,意思是-1 = 11111111(根据维基百科)。
此外,来自 java 文档:“位模式由左侧操作数给出,而要移位的位置数由右侧操作数给出。无符号右移位运算符 >>>”将零移到最左边位置,而“>>”后最左边的位置取决于符号扩展。”
这意味着 >>> 每次都会将 0 移到最左边。所以我希望这段代码是
迭代:x的位表示
0:11111111
1:01111111
2:00111111
3:00011111
...很快
但是,我的输出始终是 X: -1,这意味着(我猜)>>> 将符号位放在最左边的位置。所以我然后尝试>>,结果相同。
这是怎么回事?我希望我的输出是:X:-1,x:127,x:63,等等。