背景
在计算机计算过程中,如果计算结果超出了当前位数能表示的最大值,则称为正溢(上溢),
如果低于当前位数能表示的最小值,则称为负溢(下溢),那么具体是怎么通过符号位来判断这两种异常情况呢?接下来讨论双符号位二进制的情况。
结论
计算机存储数据采用双浮号位(即00表示正号,11表示负号),两个符号位相同的数增加时:
00 正常运算后的正数符号位
11 正常运算后的负数符号位
01 正溢(上溢)后的正数符号位
10 负溢(下溢)后的负数符号位
这里举两个例子(按照计算机中用补码参与运算的规律,以4位双符号二进制为例):
4位双符号二进制,表示范围[-3,+3]
1 正数相加
(1)正常相加的情况:1 + 1
原码:00 01 + 00 01
反码:00 01 + 00 01
补码:00 01 + 00 01
补码相加得:00 10
(2)正溢相加的情况:3 + 3
原码:00 11 +00 11
反码:00 11+ 00 11
补码:00 11 +00 11
补码相加得:01 10,产生了正溢出
2 负数相加
(1)正常相加的情况:(-1) + (-1)
原码:11 01 + 11 01
反码:11 10 + 11 10
补码:11 11 + 11 11
补码相加得(1)11 10,舍弃最高位,即11 10
(2) 负溢相加的情况:(-3)+(-3)
原码:11 11 + 11 11
反码:11 00 + 11 00
补码:11 01 + 11 01
补码相加得(1)1010,舍弃最高位,即1010,产生了负溢出