以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