在这个例子中:
class Test3 {
public static void main(String[] args) {
byte mask = 1;
for(mask <<= 7; mask != 0; mask >>>= 1) {
System.out.print(mask + " ");
}
}
}
我期待输出为-128 64 32 16 8 4 2 1,而我收到-1的无限递归循环。如果我将mask变量的类型更改为int,则程序行为正常。你能解释一下为什么我有这个特定的输出吗?提前感谢您抽出时间帮助我!
答案 0 :(得分:3)
Java中的所有字节操作都是通过将一个字节转换为整数来实现的,当操作完成时,它会将整数转换回一个字节。转换为字节只会从int中删除最高字节。因此,int值0xff00
将被转换为字节值0x00
。现在举个例子:
当您将字节值1向右移动七次时,您首先得到整数值:
0x0001
转移到:
0x0080
并通过删除最高字节转换回字节值:
0x80 == 100000000 == -128
现在将字节值1位置向右移动,首先将字节转换为整数:
0xff80
然后将0移到最高位(位置31),这导致:
0x7fc0
通过删除最高字节结果将int值转换回字节:
0xc0 == 11000000 == -64
这个连续直到字节值
0xff == 11111111 == -1
永远不会结束。