一补码


二进制数系统是数字系统中最流行的数制表示技术之一。在二进制系统中,只有两个符号或可能的数字值,即 0(关)和 1(开)。由任何只有两种工作状态或可能条件的设备表示。

通常,二进制数有两种补码:1's 补码和2's 补码。要获得二进制数的 1's 补码,只需反转给定的数字。例如,二进制数 110010 的 1's 补码是 001101。要获得二进制数的 2's 补码,是给定数字的 1's 补码加上最低有效位 (LSB) 的 1。例如,二进制数 10010 的 2's 补码是 (01101) + 1 = 01110。

二进制数的 1's 补码

将二进制数转换为 1's 补码有一个简单的算法。要获得二进制数的 1's 补码,只需反转给定的数字。您可以简单地使用仅一个非门对二进制数输入的每一位实现逻辑电路。如下所示给出了 4 位 1's 补码的逻辑电路实现。

示例 1:求二进制数 10101110 的 1's 补码。

只需反转给定二进制数的每一位,因此给定数字的 1's 补码将是 01010001。

示例 2:求二进制数 10001.001 的 1's 补码。

只需反转给定二进制数的每一位,因此给定数字的 1's 补码将是 01110.110。

示例 3:求每个 3 位二进制数的 1's 补码。

只需反转给定二进制数的每一位,因此每个 3 位二进制数的 1's 补码将是:

二进制数
1's 补码
000
111
001
110
010
101
011
100
100
011
101
010
110
001
111
000

1's 补码二进制数的用途

1's 补码二进制数有各种用途,主要用于有符号二进制数表示和二进制数的各种算术运算,例如加法、减法等。

有符号二进制数表示中的 1's 补码

1's 补码二进制数在有符号数表示中非常有用。正数简单地表示为二进制数。正二进制数不需要做任何处理。但在负二进制数表示的情况下,我们用 1's 补码表示。如果数字为负数,则使用 1's 补码表示。首先用正号表示数字,然后取该数字的 1's 补码。

示例:假设我们使用 5 位寄存器。-5 和 +5 的表示如下

+5 按符号幅度法表示。-5 使用以下步骤表示

(i) +5 = 0 0101

(ii) 取 0 0101 的 1's 补码,即 1 1010。MSB 为 1,表示数字为负数。

负数的 MSB 始终为 1。

数字范围:对于 k 位寄存器,可以存储的最大正数是 ( 2 (k-1) -1),可以存储的最小负数是 -( 2 (k-1) -1)。

注意该系统的一个缺点是 0 有两种不同的表示,一种是 -0(例如,在 5 位寄存器中为 1 1111),另一种是 +0(例如,在 5 位寄存器中为 0 0000)。


让我们看看算术运算:1's 补码二进制数中的减法和加法。

1's 补码减法

使用 1's 补码减去两个二进制数的算法解释如下

  • 取被减数的 1's 补码
  • 与被减数相加
  • 如果上述加法的结果有进位 1,则将其加到给定结果的最低有效位 (LSB)
  • 如果没有进位 1,则取结果的 1's 补码,这将为负数

请注意,被减数是从另一个数(即被减数)中减去的数。

示例(情况 1:当进位为 1 时):计算 10101 - 00101

根据上述算法,取被减数 00101 的 1's 补码,即 11010,然后将这两者相加。所以,10101 + 11010 =1 01111 。由于有进位 1,所以将其加到给定结果的 LSB,即 01111+1=10000,这就是答案。

示例(情况 2:当没有进位时):计算 11110 与 1110 的差

根据上述算法,取被减数 11110 的 1's 补码,即 00011。然后将这两者相加,所以, 11001 + 00011 =11100 。由于没有进位 1,所以取上述结果的 1's 补码,即 00011,这是一个负数,即 00011,这就是答案。

类似地,您可以减去两个混合(带小数部分)的二进制数。请注意,每当您获得进位 1 时,您始终将进位加到结果的最低有效位 (LSB)。混合或小数二进制数的 LSB 是混合或小数二进制数的最后(最右边)一位。

1's 补码加法

使用 1's 补码对两个二进制数进行加法有不同的情况。这些解释如下。

情况 1:当正数的幅度较大时,正数和负数的加法:

当正数的幅度较大时,只需取负数的 1's 补码,并将和的循环进位加到最低有效位 (LSB)。

示例:加 1110 和 -1101。

所以,取 1101 的 1's 补码,即 0010,然后与给定数字相加。所以, 1110+0010=1 0000 ,然后将此进位加到 LSB,0000+1=0001 ,这就是答案。

请注意,如果寄存器大小较大,则填充相同的 MSB 值以保留输入和输出的符号幅度。


情况 2:当负数的幅度较大时,正数和负数的加法:

当负数的幅度较大时,取负数的 1's 补码并与给定的正数相加。由于不会有任何循环进位,因此取结果的 1's 补码,该结果将为负数。

示例:在五位寄存器中加 1010 和 -1100。

请注意,有五位寄存器,因此这些新数字将是 01010 和 -01100。
现在取 01100 的 1's 补码,即 10011,并加 01010+10011=11101 。然后取此结果的 1's 补码,即 00010,这将是一个负数,即 -00010,这就是答案。

情况 3:两个负数的加法

您需要对这两个数字都取 1's 补码,然后将这些 1's 补码的数字相加。由于始终存在循环进位,因此将其再次加到结果的 MSB。现在,也取先前结果的 1's 补码,因此这将是一个负数。

或者,您可以直接添加两个负数,并获得此结果,该结果将仅为负数。

示例:在五位寄存器中加 -1010 和 -0101。

这五个位数是 -01010 和 -00101。将这些数字的补码相加,10101+11010 =1 01111 。由于有进位 1,所以将其加到结果的 LSB,即 01111+1=10000 。现在取此结果的 1's 补码,即 01111,此数字为负数,即 -01111,这就是答案。

请注意,循环进位加法仅发生在 1's 补码算术运算中,而不发生在 2's 补码算术运算中。

更新于: 2023-10-31

92K+ 次查看

开启您的职业生涯

通过完成课程获得认证

开始学习
广告