Java:java中Integer.max_value+1为什么是个负数?

Integer.max_value = 01111111 111111111111111111111111,首位0是符号位不参与运算,所以+1后应该是0000 0000 0000 0000 0000 0000 0000 0000 吗?(虽然我也觉得不对,但是符号位确实不应该参与运算的不是吗)

java中int的最大数值是2147483647
这是因为整数在内存中使用的是补码的形式表示,最高位是符号位,0表示正数,1表示负数,当你+1时已经超出了java定义的最大值。详细过程如下
也就是Integer中定义的

public static final int MAX_VALUE = 0x7fffffff;
每个十六进制数4bit,因此8位16进制是4个字节,刚好是一个int整型。
F的二进制码为 1111
7的二进制码为 0111
7fffffff(十六进制) = 0 1111111111111111111111111111111(二进制)
二进制做运算+1 =1 1111111111111111111111111111111
按照规定 最高位 1表示负数 所以你的整个就变成了负数
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-18
Integer.MAX_VALUE = 01111111 11111111 11111111 11111111
+1 = 10000000 00000000 00000000 00000000
最高位是符号位为1,这个数是负数。

在Java中 Integer.MAX_VALUE+1==Integer.MIN_VALUE
负数的源码是补码取反+1,刚好是Integer.MIN_VALUE本回答被网友采纳
第2个回答  2017-06-22
Integer.max_value 二进制是
int 的本身没有负数,公有32位
定义一半表示负数,所以int最小值和最大值是挨着的

分别是0111111.....1 31 个1 最大值
和100....00 31 个0 最小值
最大值+1就直接遍成了最小值
第3个回答  2017-08-04
有符号整型的最高位是符号位,0为非负数,1为负数,32位整型的最大值即为0x7FFFFFFF
如果此值加一,则整数部分溢出到符号位,会变为0x8000000,这样就变成了最小负整数了
第4个回答  2017-07-11
Integer.max_value = 01111111 111111111111111111111111
+1 = 10000000 00000000 00000000 00000000
最高位是符号位为1,这个数是负数,负数的源码是补码取反+1,刚好等于Integer.min_value
结果当然是负数了,Integer的最小值