有符号二进制算术
在本章中,我们将讨论使用 2 的补码方法对任何两个有符号二进制数执行的基本算术运算。基本算术运算是加法和减法。
两个有符号二进制数的加法
考虑两个有符号二进制数 A 和 B,它们以 2 的补码形式表示。我们可以对这两个数字执行加法,这类似于两个无符号二进制数的加法。但是,如果结果和包含来自符号位的进位,则丢弃(忽略)它以获得正确的值。
如果结果和为正,您可以直接找到它的大小。但是,如果结果和为负,则取其 2 的补码以获得幅度。
示例 1
让我们使用 2 的补码方法对两个十进制数 +7 和 +4 进行 加法。
+7 和 +4 的 2 的补码 表示形式如下所示,每个表示形式有 5 位。
$$\mathrm{(+7)_{10} \: = \: (00111)_{2}}$$
$$\mathrm{(+4)_{10} \: = \: (00100)_{2}}$$
这两个数字的加法是
$$\mathrm{(+7)_{10} \: + \: (+4)_{10} \: = \: (00111)_{2} \: + \: (00100)_{2}}$$
$$\mathrm{\Rightarrow \: (+7)_{10} \: + \: (+4)_{10} \: = \: (01011)_{2}}$$
结果和包含 5 位。因此,符号位没有进位。符号位"0"表示结果和为正。因此,和的幅度在十进制数系统中为 11。因此,两个正数相加将得到另一个正数。
示例 2
让我们使用 2 的补码方法对两个十进制数 -7 和 -4 进行 加法。
-7 和 -4 的 2 的补码 表示形式如下所示,每个表示 5 位。
$$\mathrm{(−7)_{10} \: = \: (11001)_{2}}$$
$$\mathrm{(−4)_{10} \: = \: (11100)_{2}}$$
这两个数相加是
$$\mathrm{(−7)_{10} \: + \: (−4)_{10} \: = \: (11001)_{2} \: + \: (11100)_{2}}$$
$$\mathrm{\Rightarrow \: (−7)_{10} \: + \: (−4)_{10} \: = \: (110101)_{2}}$$
结果和包含 6 位。在这种情况下,进位由符号位获得。所以,我们可以去掉它。
去掉进位后的结果和为 (−7)10 + (−4)10 = (10101)2。
符号位"1"表示结果和为负。因此,通过对其取 2 的补码,我们将得到结果和的幅度为十进制数中的 11。因此,两个负数相加将得到另一个负数。
两个有符号二进制数的减法
考虑两个有符号二进制数 A 和 B,它们以 2 的补码形式表示。我们知道正数的 2 的补码会给出一个负数。因此,每当我们必须从数字 A 中减去数字 B 时,就取 B 的 2 的补数并将其添加到 A。因此,从数学上我们可以将其写为
A - B = A + (B 的 2 的补数)
同样,如果我们必须从数字 B 中减去数字 A,就取 A 的 2 的补数并将其添加到 B。因此,从数学上我们可以将其写为
B - A = B + (A 的 2 的补数)
因此,两个有符号二进制数的减法类似于两个有符号二进制数的加法。但是,我们必须取要减去的数字的 2 的补数。这就是 2 的补码技术的优势。遵循两个有符号二进制数相加的相同规则。
示例 1
让我们使用 2 的补码方法对两个十进制数 +7 和 +4 进行减法。
这两个数的减法是
$$\mathrm{(+7)_{10} \: − \: (+4){10} \: = \: (+7)_{10} \: + \: (−4)_{10}}$$
下面显示了 +7 和 -4 的 2 的补码 表示,每个表示 5 位。
$$\mathrm{(+7)_{10} \: = \: (00111)_{2}}$$
$$\mathrm{(+4)_{10} \: = \: (11100)_{2}}$$
$$\mathrm{\Rightarrow \: (+7)_{10} \: + \: (+4)_{10} \: = \: (00111)_{2} \: + \: (11100)_{2} \: = \: (00011)_{2}}$$
这里,进位是从符号位获得的。因此,我们可以将其删除。删除进位后的结果和为
$$\mathrm{(+7)_{10} \: + \: (+4)_{10} \: = \: (00011)_{2}}$$
符号位'0'表示结果和为正。因此,其大小在十进制中为3。因此,两个十进制数 +7 和 +4 相减的结果为 +3。
示例 2
让我们使用 2 的补码方法对两个十进制数 +4 和 +7 进行 减法。
这两个数的减法为
$$\mathrm{(+4)_{10} \: − \: (+7)_{10} \: = \: (+4)_{10} \: + \: (−7)_{10}}$$
+4 和 -7 的 2 的补码 表示形式如下所示,每个表示 5 位以下。
$$\mathrm{(+4)_{10} \: = \: (00100)_{2}}$$
$$\mathrm{(-7)_{10} \: = \: (11001)_{2}}$$
$$\mathrm{\Rightarrow \: (+4)_{10} \: + \: (-7)_{10} \: = \: (00100)_{2} \: + \: (11001)_{2} \: = \: (11101)_{2}}$$
这里,进位不是从符号位获得的。符号位"1"表示结果和为负。因此,通过对其取 2 的补码,我们将得到结果和的数值为十进制数中的 3。因此,两个十进制数 +4 和 +7 相减的结果为 -3。