是否存在 i+1 > i 的值呢?

是否存在 i+1 > i 的值呢?
答案:是肯定的。为什么呢?
因为在java中整型值是有范围的,它的最大值为2^31
-1,也就是2147483647,最小值是-2^31-1,也就是-2147483648。
当对最大值进行+1时,就变成2147483648(越界了),就溢出了,那么此值为多少呢?结果是-2147483648,即为Integer.MIN_VALUE,所以就有了Integer.MAX_VALUE + 1=Integer.MIN_VALUE

分析

为什么会越界呢?
咱们知道一个int值占用4个字节,每个字节包含8位二进制,每一位都是(0或1),最高位,第32位为符号位,0表示正数,1标示负数。那么剩下的31位总共能存多少个正数呢?(2^31)
-1,为啥不是2^31
次方呢,因为,2的31次方是要进位到第32位的,而第32位被符号位占用了,所以只只能存2^31-1。并且jdk中正数为原码表示,而负数为补码表示。
那补码是怎么算出来的呢?
补码是把值的每一位的取反,即0变为1,1变为0,然后整体再加1.
举一个简单的例子,
0111代表着正数7,那负7怎么表示呢?
是否存在 i+1 > i 的值呢?
就是正7的按位取反+1,也就是
正7二进制表示是0111,它的值取反是1000,再加1就是1001。计算机就是用1001来代表负7的,在计算机中求绝对值或相反数一定是很多的,那怎么求一个数的相反数呢?
也是取他的反码+1,-7的二进制码是1001取反是0110,再加1就是0111, 0111的反码是1001 1001的反码是0111。是不是很神奇?
偏题了,回来继续说,为啥负数比正数多一位呢?(为了省事,暂时用四位代替一下) 因为,大于1000数和小于1000的码都已经别其他值占用了,而就剩1000没被占用,所以就让他代表了最小值,怎么说呢?看例子

绝对值 正数码 负数码
1 0001 1111
2 0010 1110
3 0011 1101
4 0100 1100
5 0101 1011
6 0110 1010

我就不往下一一列举了,感兴趣的可以自己动手试下。
1000是最后剩下的。
再次回到正题上,当int 的值为最大值(为了省事,暂时用四位代替一下)
0111进行+1时,jdk设计的就支持4位,计算机不会自己报溢出,他会默默的计算完之后,把超出的高位舍去,余下的值代表结果值,注意看哈!当0111进行+1的时候,他变成了1000, 他没有超过四位,所以不需要舍去值,而1000就是负的最大值-1的值啊,也就是int的最小值啊,所以存在i+1<i。
Ps.补一个会高位会舍去的例子,当0111+0111的时候 ,他的结果值是多少呢?
11110,No!结果是1110,因为它已经你超出了4位了,所以高位的1被舍去了,所以结果就是1110,因为高位是1所以他是负数,具体是多少,就当今天的作业了。

老铁啊,不要光收藏啊,点个赞再走呗!