1的补码表示法


这是在计算机中表示有符号整数的方法之一。在这种方法中,最高有效位 (MSD) 具有额外的含义。

  • 如果 MSD 为 0,我们可以像解释任何普通无符号整数一样评估该数字。
  • 如果 MSD 为 1,则表示该数字为负数。

其他位表示数字的幅度(绝对值)。

如果数字为负数,则其他位表示数字幅度的 1 的补码。

下面显示了一些有符号十进制数及其在 1 的补码表示法中的等效值,假设字长为 4 位。

有符号十进制
1 的补码
   +6
   0110
   -6
   1001
   +0
   0000
   -0
   1111
   +7
   0111
   -7
   1000

范围

从上表可以看出,如果字长为 n 位,则可以表示的数字范围为 -(2n-1- 1) 到 +(2n-1 -1)。下表显示了字长和可以表示的 1 的补码数字的范围。

字长
1 的补码数字范围
4
-7 到 +7
8
-127 到 +127
16
-32767 到 +32767
32
-2147483647 到 +2147483647

示例 1

 使用计算机添加数字 (+5) 和 (-3)。假定这些数字使用 4 位 1 的补码表示法表示。

              1110 <- carry generated during addition

              0101 <- (+5) First Number

           +  1100 <-(-3) Second Number

              0001 <- (+1) Sum


计算机没有给出正确的答案 +2 = 0010,而是给出了错误的答案 +1 = 0001!但是,为了得到正确的答案,计算机将不得不简单地将生成的最终进位添加到结果中,如下所示。

   0001

 +    1

   0010 = (+2) Result

示例 2

使用计算机添加数字 (-4) 和 (+2)。假定这些数字使用 4 位 1 的补码表示法表示。

              0010 <- carry generated during addition

              1011 <- (-4) First Number

           +  0010 <-(+2) Second Number

              1101 <- (-2) Sum


添加最终数组后,结果保持为 1101。这是 -2,这是正确答案。在 1 101 中,MSB 为 1。这意味着该数字为负数。然后,其余位不会直接提供幅度。要解决此问题,只需考虑 1 101 的 1 的补码。1 101 的 1 的补码为 0 010,即 +2。因此,1 101(0 010 的 1 的补码)为 -2。

缺点

  • 1 的补码表示法不太容易理解,因为它与表示有符号数字的传统方式大不相同。

  • 另一个缺点是 0 有两种表示法(0000 和 1111),当计算机想要测试 0 结果时,这非常不方便。

优点

  • 对于计算机来说,执行算术运算非常方便。为了在加法后得到正确的答案,必须将加法结果和最终进位加起来。

因此,1 的补码表示法通常也不用于在计算机内部表示有符号数字,因此出现了 2 的补码的概念。

更新于: 2020年6月27日

5K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告