【发布时间】:2009-02-19 01:08:43
【问题描述】:
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,等等。
【问题讨论】:
-
这是 Java Puzzlers 中的问题之一。
标签: java bit-manipulation byte