我的字节突然变为负数并倒数

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)

(&操作员将自动执行二进制数字提升.)

  • @MarkRotteveel:哇,显然我在承认错别字时甚至会犯错.显然我需要咖啡. (2认同)