1

可能重复:
Java 如何处理整数下溢和上溢以及如何检查?
System.out.println(4*2147483647) 在java中如何等于-4?

我想知道为什么会这样:

2 * Integer.MAX_VALUE == -2

我期待着你的回应。

4

5 回答 5

6

由于整数溢出,您会得到此结果:在表示负整数的二进制补码系统中,取最大值011.....112并将其乘以2得到11.....1102,对应于-2.

于 2012-10-23T17:42:46.470 回答
1

那是因为整数溢出。

于 2012-10-23T17:44:50.467 回答
1

Integer.MAX_VALUE0x7FFFFFFF。乘以 2 就可以得到0xFFFFFFFE(相当于左移一位)。这是一个负数(第一位是 1)并且是 的二进制表示-2

于 2012-10-23T17:45:05.563 回答
1

这是因为二进制补码,其中最左边的位用于表示数字是正数 (0) 还是负数 (1)。因此,当您自己添加 max int (相当于乘以 2)时,会发生这种情况:

  011111111111111111111111
+ 011111111111111111111111
__________________________
  111111111111111111111110

并且111111111111111111111110代表-2。

于 2012-10-23T17:45:11.433 回答
0

Int的MAX_VALUE是2^31 - 1 = 2147483647 = 0111 1111 1111 1111 1111 1111 1111 1111(二进制数)最高位(这里是第一位0,表示整数为正数,1表示负数。

(假设一个整数的长度是 4 个字节),2 * MAX_VALUE,在计算机中,一个整数乘以 2 是在位上左移(运算符 <<),例如。2 << 1 = 4; 2 << 2 = 8; 所以 0111 1111 1111 1111 1111 1111 1111 1111 << 1 变为 1111 1111 1111 1111 1111 1111 1111 1110 等于十进制的 -2。

于 2012-10-23T18:11:21.777 回答