当我们使用int,long等进行计算时,本质还是在二进制的形势下进行的运算。
当进行无符号的整形计算时,每一位的数值均参与了运算,以四位为例:
15+15=1111+1111
30=11110
因为4位限制,我们舍弃了最高位的1=2^4
所以->
30-2^4=1110
14=1110 符合逻辑
接下来我们以同样的思路看待有符号整形,同样以4位为例:
有符号整形有两种溢出情况,我们先看待负溢出:
-8+(-8)=1000+1000
-16=10000
有符号数的二进制是按补码显示的,最高位为符号位,1时为负,0时为正,且最高位的数值要参与运算
所以这里舍弃1相当于我们抛弃了-2^4
-16-(-2^4)=0000
-16+16=0//吻合
正溢出时:
7+7=0111+0111
因为两个7的最高位本来是正数,现在变成了负数,我们要再次变正,相当于要转换两次
14=1110+23+23
14=1110+16
-2=1110//吻合
网友评论