JRE*_*REN 5 java byte for-loop
我有一些代码,每次通过我的循环时,它会增加8位字节.这一切都按预期进行,直到我达到120,然后我的数字突然变为负数.
码:
byte b = 0;
for(int i = 0; i < 0x100; i += 8) {
System.out.print(b + " ");
b += 8;
}
Run Code Online (Sandbox Code Playgroud)
输出:
0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 -128 -120 -112 -104 -96 -88 -80 -72 -64 -56 -48 -40 -32 -24 -16 -8
我想看到的:
0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 128 136 144 152 160 168 176 184 192 200 208 216 224 232 240 248 256
有没有人知道为什么它会在120后开始倒计时而不是上升到256?
Jon*_*eet 12
有没有人知道为什么它会在120后开始倒计时而不是上升到256?
是.Java字节是签名的 - 就这么简单.从JLS的4.2.1节:
整数类型的值是以下范围内的整数:
- 对于字节,从-128到127(含)
- ...
显示字节值的最简单方法就是将其提升为int
并使用0xff屏蔽它:
System.out.print((b & 0xff) + " ");
Run Code Online (Sandbox Code Playgroud)