二元减法
我们可以使用适用于十进制数的标准技术从另一个二进制数中减去一个二进制数(减去每个位对,从右到左,根据需要从位到左“借用”)。但是,如果我们能够利用已经熟悉(且更简单)的二元加减技术,那就更好了。
正如我们刚刚了解到的,我们可以通过使用“二进制补码”方法和负位权重位来表示负二进制数。在这里,我们将使用这些负二进制数进行加法减法。
这是一个示例问题:
减法:710 - 510 加法当量:710 + (-510)
如果我们需要做的只是以二进制(二进制补码)形式表示 7 和负 5,我们只需要三位加上负权位:
正七 =01112 负五 =10112
现在,让我们将它们加在一起:
<前>。 1111 <--- 进位 . 0111 . + 1011 . ------ . 10010 . | .丢弃额外的位 . .答案 =00102
由于我们已经将数字位域定义为三位加上负权重位,因此答案 (1) 中的第五位将被丢弃,从而得到 00102 或正二的结果,这是正确答案。
理解为什么我们丢弃额外位的另一种方法是记住较低数字的最左边的位具有负权重,在这种情况下等于负八。
当我们将这两个二进制数加在一起时,我们实际上对 MSB 所做的是从较高数字的 MSB 中减去较低数字的 MSB。在减法中,永远不会“携带”一个数字或位到下一个左边的位置权重。
让我们尝试另一个例子,这次使用更大的数字。如果我们想把-2510加到1810上,首先要决定我们的二进制位域有多大。
为了表示我们问题中的最大(绝对值)数,即 25,我们至少需要 5 位,再加上第 6 位作为负权重位。让我们从表示正的 25 开始,然后找到两个的补码并将它们放在一个数字中:
+2510 =0110012(显示所有六位) 110012 的补码 =1001102 一的补码 + 1 =二的补码 =1001112 -2510 =1001112
本质上,我们通过使用负权重(第 6 个)位的值为负 32 加上正 7(二进制 1112)来表示负 25。
<前>。 1810 =0100102 . .现在,让我们将它们加在一起,看看我们得到了什么: . . 11 <--- 进位 . 100111 . + 010010 . -------- . 111001
由于左侧没有“额外”位,因此没有要丢弃的位。答案最左边的位是 1,这意味着答案是否定的,应该是二进制补码形式。通过将所有位与其各自的权重值相加,将答案转换为十进制形式,我们得到:
(1 x -3210) + (1 x 1610) + (1 x 810) + (1 x 110) =-710
事实上-710是-2510和1810的正确和。
相关工作表:
- 二进制数学工作表
工业技术