阅读:0
作者:严长生
二进制数的加法和减法:有符号二进制数的加减法
本节我们将讨论有符号二进制数的基本算术运算,也即加法和减法。
如果使用原码表示两个数,那么在做减法运算时,首先要比较两个数的绝对值,然后以绝对值大的一个作为被减数,绝对值小的一个作为减数,求出差值,并以绝对值大的一个符号作为差值的符号。不难看出,这个操作过程比较麻烦,而且要使用数字比较电路和减法运算电路。
如果使用补码表示两个数,那么就可以使用两个数的补码相加来代替上述的减法运算,从而省去比较电路和减法电路,简化运算器的电路结构。
所以,为了简化硬件设计,数字电路基本都采用补码的形式来表示数字。
如果结果的符号位是 0,那么表明是正数,直接取得数字大小即可(正数的补码和原码相同);如果符号位是 1,那么表明是负数,必须先把补码转换为原码才能得到正确的值。
-7 和 -4 的补码分别是:
使用补码的形式来计算加法:
使用补码的形式来计算加法:
如果使用原码表示两个数,那么在做减法运算时,首先要比较两个数的绝对值,然后以绝对值大的一个作为被减数,绝对值小的一个作为减数,求出差值,并以绝对值大的一个符号作为差值的符号。不难看出,这个操作过程比较麻烦,而且要使用数字比较电路和减法运算电路。
如果使用补码表示两个数,那么就可以使用两个数的补码相加来代替上述的减法运算,从而省去比较电路和减法电路,简化运算器的电路结构。
所以,为了简化硬件设计,数字电路基本都采用补码的形式来表示数字。
有符号二进制数的加法
以有符号二进制数 A 和 B 为例,将它们写成补码形式后,就可以像无符号数一样对它们直接进行相加。不过注意,如果符号位产生了进位,必须直接舍弃(忽略)才能得到正确的值。如果结果的符号位是 0,那么表明是正数,直接取得数字大小即可(正数的补码和原码相同);如果符号位是 1,那么表明是负数,必须先把补码转换为原码才能得到正确的值。
例子1
让我们使用补码来计算两个十进制数字 +7 和 +4 的和。|+7| + |+4| = 11,使用四个二进制位才能表示,这是数值位;此外还有一个符号位,所以共需要五个二进制位。| | 表示求绝对值。+7 和 +4 的补码分别是:
(+7)10 = (00111)2
(+4)10 = (00100)2
(+7)10 + (+4)10 = (00111)2 + (00100)2
⇒(+7)10 + (+4)10 = (01011)2
例子2
让我们使用补码来计算两个十进制数 -7 和 -4 的和。与上同理,|-7| + |-4| = 11,也需要五个二进制位。-7 和 -4 的补码分别是:
(−7)10 = (11001)2
(−4)10 = (11100)2
(−7)10 + (−4)10 = (11001)2 + (11100)2
⇒(−7)10 + (−4)10 = (110101)2
(−7)10 + (−4)10 = (10101)2
符号位为 1 表明结果是负数,必须先转换为原码才能得到数字的大小。转换为原码后的结果是:(−7)10 + (−4)10 = (11011)2
所以,-7 加 -4 的结果是 -11。有符号二进制数的减法
以有符号二进制数 A 和 B 为例,我们知道,减去一个数等于加上该数的相反数(符号相反的数称为“相反数”),也即:
A - B = A + (-B)
B - A = B + (-A)
例子3
让我们使用补码来计算 +7 减去 +4 的差。先将它们转换成加法形式:(+7)10 − (+4)10 = (+7)10 + (−4)10
与上同理,|+7| + |-4| = 11,也需要五个二进制位。使用补码的形式来计算加法:
(+7)10 = (00111)2
(-4)10 = (11100)2
⇒(+7)10 + (-4)10 = (00111)2 + (11100)2 = (100011)2
(+7)10 + (-4)10 = (00011)2
符号位为 0 表明是正数,直接转换成十进制形式即可,结果为 +3。例子4
让我们使用补码来计算 +4 减去 +7 的差。先将它们转换成加法形式:(+4)10 − (+7)10 = (+4)10 + (−7)10
与上同理,|+4| + |-7| = 11,也需要五个二进制位。使用补码的形式来计算加法:
(+4)10 = (00100)2
(-7)10 = (11001)2
⇒(+4)10 + (-7)10 = (00100)2 + (11001)2 = (11101)2
(+4)10 + (-7)10 = (10011)2
所以,+4 减去 +7 的结果为 -3。