java为什么是2*整数。最大值=2?
Possible Duplicate:
How does Java handle integer underflows and overflows and how would you check for it?
How is System.out.println(4*2147483647) equal to -4 in java?
我想知道为什么会这样:
2 * Integer.MAX_VALUE == -2
我期待着您的回复
你可以在下面搜索框中键入要查询的问题!
Possible Duplicate:
How does Java handle integer underflows and overflows and how would you check for it?
How is System.out.println(4*2147483647) equal to -4 in java?
我想知道为什么会这样:
2 * Integer.MAX_VALUE == -2
我期待着您的回复
# 1 楼答案
这是因为二的补码,其中lef-most位用于表示一个数字是正(0)还是负(1)。因此,当你自己加上max int(相当于乘以2)时,就会发生这样的情况:
和
111111111111111111111110
代表-2# 2 楼答案
Integer.MAX_VALUE
是0x7FFFFFFF
。乘以2得到0xFFFFFFFE
(相当于左移一位)。这是一个负数(第一位是1),是-2
的二进制表示# 3 楼答案
Int的最大值是2^31-1=2147483647=0111111111111111111111111111111111111(二进制数)最高位(这里是第一位0,表示整数是正数,1表示负数)
(假设一个整数的长度是4字节),2*MAX_值,在计算机中,一个整数乘以2就是左移位(运算符<;<;)在位上,例如2<&书信电报;1 = 4; 2<&书信电报;2 = 8; 所以0111111111111111111111111111111111111111111111<&书信电报;1变成1111111111111111111111111111111111111110,等于小数点后的-2
# 4 楼答案
这是因为整数溢出
# 5 楼答案
你得到这个结果是因为integer overflow:在表示负整数的two's complement系统中,取2,对应于
011.....11
2的最大值乘以2
得到^{-2