Java 我的字节突然变成负数并倒计时

Java 我的字节突然变成负数并倒计时,java,for-loop,byte,Java,For Loop,Byte,我有一些代码,每当一个字节通过我的循环时,它就会增加8位。 一切如期而至,直到我达到120,然后我的数字突然变成负数 代码: byte b = 0; for(int i = 0; i < 0x100; i += 8) { System.out.print(b + " "); b += 8; } 字节b=0; 对于(int i=0;i

我有一些代码,每当一个字节通过我的循环时,它就会增加8位。 一切如期而至,直到我达到120,然后我的数字突然变成负数

代码:

byte b = 0;

for(int i = 0; i < 0x100; i += 8) {
    System.out.print(b + " ");
    b += 8;
}
字节b=0;
对于(int i=0;i<0x100;i+=8){
系统输出打印(b+“”);
b+=8;
}
输出:

byte b = 0;

for(int i = 0; i < 0x100; i += 8) {
    System.out.print(b + " ");
    b += 8;
}
081624324048566472808896104112120-128-120-112-104-96-88-80-72-64-56-48-40-32-24-16-8

我想看的内容:

byte b = 0;

for(int i = 0; i < 0x100; i += 8) {
    System.out.print(b + " ");
    b += 8;
}
0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 128 136 144 152 160 168 176 184 192 200 208 216 224 232 240 248 256

有人知道为什么它在120之后开始倒数,而不是上升到256吗

有人知道为什么它在120之后开始倒数,而不是上升到256吗

对。Java字节是有符号的——就这么简单。发件人:

整数类型的值是以下范围内的整数:

  • 对于字节,从-128到127,包括
将字节值显示为无符号的最简单方法是将其提升为
int
,并用0xff屏蔽:

System.out.print((b & 0xff) + " ");

(将自动执行。)

一个字节是介于-128到+127之间的有符号数量。当它达到127时,它会转到最低负值。

因为它不在字节范围内。
字节的范围从-128到+127。字节数据类型是一个8位有符号2的补码整数。其最小值为-128,最大值为127(含):

对于字节,从-128到127,包括


因此,
128
的值实际上是
字节中的
-128
,这是因为一个字节只能存储8位信息,即2^8=256个值,128个负值,0和127个正值,并且它环绕。如果需要增加到256,请使用
int
,否则,如果内存使用很重要,请使用字节从-127计数到128。

@Mark Rottevell-是的,即使Jon Skeet偶尔也会输入奇怪的错误;-)。但仍然是+1;不言而喻。@MarkRotteveel:Doh,拼写错误,修复谢谢-现在有了适当的JLS参考:)@MarkRotteveel:Wow,显然我在确认拼写错误时甚至会拼写错误。显然我需要咖啡。谢谢你,乔恩
(b&0xff)
这就是我要找的。我的答案是正确的,我提供了一个替代方案,为什么我被否决了?当答案只有“一个字节只能存储8位信息,使用int”和其他什么(这显然是错的,因为0-255是8位)时,你被否决了。8位是256个不同的值,正好是-127-128。这不是错误的,它是不完整的。