以16位int为例说明。2字节
首先你要明白,在内存中存放的数都是补码。
且数值范围已定-32768~32767。
小的数是-32768,原码是1111,1111,1111,1111,反码1000,0000,0000,0000,补码是1000,0000,0000,0000。
-1的补码是1111,1111,1111,1111(原码1000,0000,0000,0001,反码1111,1111,1110)
越界过程:
-32768-1=[-32768]+[-1]=1000,0000,0000,0000+1111,1111,1111,1111=0111,1111,1111,1111
=32767
//常规得到1,0111,1111,1111,1111,但是数值范围规定了数值的大值,进位超出范围就忽略了进位值。
大值是32767,补码是0111,1111,1111,1111。1的补码是0000,0000,0000,0001
越界过程:
32767+1=[32768]+[1] =0111,1111,1111,1111+0000,0000,0000,0001=1000,0000,0000,0000
=-32768