使用补码进行加法和减法

2024 年 8 月 28 日 | 3 分钟阅读

在上一节中,我们学习了如何使用反码执行加法和减法等算术运算。 在本节中,我们将学习使用补码执行这些运算。

使用补码进行加法

当我们使用补码加两个二进制数时,可能出现三种不同的情况,如下所示

情况 1:正数与负数相加,当正数的幅度较大时。

首先找到给定负数的补码。 与给定的正数相加。 如果我们得到尾端进位 1,则该数字将是一个正数,并且该进位将被丢弃,其余位为最终结果。

示例:1101 和 -1001

  1. 首先,找到负数 1001 的补码。因此,为了找到补码,将所有 0 更改为 1,将所有 1 更改为 0,或者找到数字 1001 的反码。数字 1001 的反码为 0110,并将 1 加到结果 0110 的 LSB。因此,数字 1001 的补码为 0110+1=0111
  2. 将两个数字相加,即 1101 和 0111;
    1101+0111=1  0100
  3. 通过添加两个数字,我们得到尾端进位 1。我们丢弃尾端进位。因此,两个数字的加法为 0100。

情况 2:正值与负值相加,当负值的幅度较大时。

首先,将正值与负数的补码值相加。这里,没有找到尾端进位。因此,我们取结果的补码以获得最终结果。

注意:结果为负值。

示例:1101 和 -1110

  1. 首先,找到负数 1110 的补码。因此,为了找到补码,将 1 加到其反码值 0001 的 LSB。
    0001+1=0010
  2. 将两个数字相加,即 1101 和 0010;
    1101+0010= 1111
  3. 找到结果 1110 的补码,即最终结果。因此,结果 1110 的补码为 0001,并在数字前添加一个负号,以便我们可以识别出它是一个负数。

情况 3:两个负数相加

在这种情况下,首先,找到两个负数的补码,然后我们将添加这两个补码数。 在这种情况下,我们总是会得到尾端进位,它将被添加到 LSB,并忘记最终结果,我们将取结果的补码。

注意:结果为负值。

示例:-1101 和 -1110 在五位寄存器中

  1. 首先找到负数 01101 和 01110 的补码。因此,为了找到补码,我们将 1 添加到这些数字的反码的 LSB。 数字 01110 的补码为 10010,01101 的补码为 10011。
  2. 我们将两个补码数相加,即 10001 和 10010;
    10010+10011= 1 00101
  3. 通过添加两个数字,我们得到尾端进位 1。该进位被丢弃,最终结果是结果 00101 的 2s 补码。因此,结果 00101 的补码为 11011,我们在数字前添加一个负号,以便我们可以识别出它是一个负数。

使用补码进行减法

以下是使用补码减去两个二进制数的步骤

  • 第一步,找到减数的补码。
  • 将补码数与被减数相加。
  • 如果我们通过添加两个数字得到进位,那么我们丢弃这个进位,结果为正数,否则取结果的补码,结果为负数。

示例 110101 - 00111

我们取减数 00111 的补码,即 11001。现在,将它们求和。 所以,

10101+11001 =1 01110.

在上面的结果中,我们得到了进位位 1。所以我们丢弃这个进位位,剩下的就是最终结果,也是一个正数。

示例 210101 - 10111

我们取减数 10111 的补码,结果为 01001。现在,我们将两个数字相加。 所以,

10101+01001 =11110.

在上面的结果中,我们没有得到进位位。 因此,计算结果的补码,即 00010。它是负数,也是最终答案。


下一个主题布尔代数