原码的加减法
加法一共有四种可能:
- 正数 + 正数:取绝对值相加即可,结果是正数
- 负数 + 负数:取绝对值相加,结果是负数
- 正数 + 负数:绝对值大的数减去绝对值小的数,符号谁大取谁的符号
- 负数 + 正数:绝对值大的数减去绝对值小的数,符号谁大取谁的符号
减法一共也有四种可能,转换成加法来算即可
计算机补码的加减法
因为减法可以转化为加法,所以只考虑加法的四种情况。
正 + 正:结果为正,有可能发生上溢,结果为负。
负 + 负:结果为负,有可能发生下溢,结果为正。
正 - 负:A-B = A+(-B)
负 - 负:A-B = A+(-B)
溢出判断
法一:
例如计算A+B=S
V
=
A
S
B
s
S
S
‾
+
A
S
‾
B
S
‾
S
S
V = A_SB_s\overline{S_S} + \overline{A_S}\ \overline{B_S}\ S_S
V=ASBsSS+AS BS SS
在这个公式中,
A
S
A_S
AS表示为A的符号(正数为0负数为1),
B
S
B_S
BS表示为B的符号,
S
S
S_S
SS为得出的结果的符号。
带入上面的逻辑表达式进行计算,如果为1就发生溢出,为0结果正常。
法二:
将两个补码带符号进行相加:
符号位进位 | 最高数位进位 | |
---|---|---|
上溢出 | 0 | 1 |
下溢出 | 1 | 0 |
最高数位进位:除去符号位最左边的两个数相加后的进位
符号位进位:符号位相加后的进位
法三
将原来的补码符号位变成两位,正数是00,负数是11,这样8位二进制码就变成了9位。
将两数相加,如果结果的符号位是01,则发生上溢,如果是10,则发生下溢。可以理解为补充出来的那个符号位是本来应该要得出的结果的符号,而原本的那个符号位表示的是实际计算出来的符号。比如说计算出来符号位是01,0是补充出来的符号位,1是原本8位二进制的符号位。0代表原本应该算出来正数,1代表算出来了负数,说明说是正数加正数发生了上溢出,结果变成负数了。