Java 我的字节突然变成负数并倒计时
我有一些代码,每当一个字节通过我的循环时,它就会增加8位。 一切如期而至,直到我达到120,然后我的数字突然变成负数 代码: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
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。这不是错误的,它是不完整的。