This question already has answers here:
How is 0x80000000 equated to -2147483648 in java?
(2个答案)
4年前关闭。
我试图用位实现错误代码。就像是:
但是当我添加
(2个答案)
4年前关闭。
我试图用位实现错误代码。就像是:
public static final long ERROR_1 = 0x1;
public static final long ERROR_2 = 0x2;
public static final long ERROR_3 = 0x4;
public static final long ERROR_4 = 0x8;
.
.
.
但是当我添加
0x80000000
时,输出为-2147483648
。如果将值更改为0x80000000l
,则输出为2147483648
。我很困惑。有人可以向我解释为什么输出不同以及我应该使用哪个输出吗?System.out.println(0x80000000); //-2147483648
System.out.println(0x80000000l); //2147483648
最佳答案
您正在体验的是整数溢出。有符号整数可以表示的最大数字为0x7FFFFFFF
,因为补码为0x80000000 = -2147483648
。
如果最高有效位设置为2的补码整数,则表示该数字为负数,0x80000000 = -2147483648
和0xFFFFFFFF = -1
。
Long可以显示更高的数字。那里只有0x7FFFFFFFFFFFFFFF = -9223372036854775808
溢出
09-10 13:44