补码


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

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

二进制数的二补码

将二进制数转换为二补码有一个简单的算法。要获得二进制数的二补码,只需反转给定的数字,然后将结果的最低有效位 (LSB) 加 1。下面给出了 4 位二补码的实现。

示例 1 - 查找二进制数 10101110 的二补码。

只需反转给定二进制数的每一位,结果为 01010001。然后将此结果的 LSB 加 1,即 01010001 + 1 = 01010010,这就是答案。

示例 2 - 查找二进制数 10001.001 的二补码。

只需反转给定二进制数的每一位,结果为 01110.110。然后将此结果的 LSB 加 1,即 01110.110 + 1 = 01110.111,这就是答案。

示例 3 - 查找每个 3 位二进制数的二补码。

只需反转给定二进制数的每一位,然后将这些反转后的数字的 LSB 加 1,

二进制数
一补码
二补码
000
000 (+0) 和 111 (-0)
000
001
110
111
010
101
110
011
100
101
100
011
100
101
010
011
110
001
010
111
000
001

二补码二进制数的用途

二补码二进制数有多种用途,主要用于有符号二进制数表示和二进制数的各种算术运算,例如加法、减法等。由于二补码表示是明确的,因此它在计算机数表示中非常有用。

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

正数简单地表示为简单的二进制表示。但如果数字为负数,则使用二补码表示。首先用正号表示数字,然后取该数字的二补码。

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

+5 的表示与符号幅值法中的表示相同。-5 使用以下步骤表示

(i) +5 = 0 0101

(ii) 取 0 0101 的二补码,即 1 1011。MSB 为 1,表示该数为负数。

负数的 MSB 始终为 1。

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

此系统的优点是 0 只有一个表示,即 -0 和 +0。在二补码表示中,零 (0) 始终被认为是正数(符号位为 0)。因此,它是一种唯一或明确的表示。

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

二补码减法

使用二补码进行两个二进制数减法的算法如下所示:

  • 取被减数的二补码
  • 与被减数相加
  • 如果上述加法的结果有进位位 1,则将其丢弃,此结果将为正数。
  • 如果没有进位位 1,则取结果的二补码,这将为负数

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

另请注意,添加“循环进位位”仅发生在一补码算术运算中,而不发生在二补码算术运算中。

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

根据上述算法,取被减数 00101 的二补码,结果为 11011,然后将两者相加。因此,10101 + 11011 = 1 10000。由于存在进位位 1,因此丢弃此进位位 1,并取此结果为 10000,它将为正数。

示例(情况 2:当没有进位位时) - 计算 11001 - 11100

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

同样,您可以减去两个混合(带小数部分)的二进制数。

二补码加法 -

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

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

当正数的幅度更大时,只需取负数的二补码,并丢弃进位位 1,此结果将为正数。

示例 - 加上 1110 和 -1101。

因此,取 1101 的二补码,结果为 0011,然后与给定数字相加。因此,1110 + 0011 = 1 0001,并且进位位 1 被丢弃,此结果将为正数,即 +0001。

请注意,如果寄存器大小较大,则使用 MSB 位的符号扩展方法来保留数字的符号。

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

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

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

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

情况 3 - 两个负数的加法 -

您需要对这两个数字取二补码,然后将这两个数字的二补码相加。由于始终存在循环进位位,因此将其丢弃。现在,也取先前结果的二补码,因此这将为负数。

或者,您可以将这两个二进制数相加,并取结果,该结果将仅为负数。

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

这五个位数字为 -01010 和 -00101。添加这些数字的二补码,10110 + 11011 = 1 10001。由于存在进位位 1,因此将其丢弃。现在取此结果的二补码,结果为 01111,这是一个负数,即 -01111,这就是答案。

请注意,由于不存在“循环进位位”的加法,因此二补码算术运算比一补码算术运算容易得多。

更新于:2023年11月8日

浏览量:15.5万+

开启你的职业生涯

完成课程获得认证

开始学习
广告