1的补码表示法

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

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

  • 如果MSD为1,则表示数字为负。

其他位指示数字的大小(绝对值)。

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

假定字长为4位,一些带符号的十进制数及其等价的1的补码表示如下。

签名十进制
1的补码
   +6
   0110
   -6
   1001
   +0
   0000
   -0
   1111
   +7
   0111
   -7
   1000

范围

从上表可以明显看出,如果字长为n位,则可以表示的数字范围为-(2 n- 1-1)到+(2 n-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


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

   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的1的补数。1 101的1的补数就是0 010,即+2。因此,作为1010的1的补码的1101为-2。

缺点

  • 1的补码表示法不是很容易理解,因为它与表示带符号数字的常规方式有很大不同。 

  • 另一个缺点是0有两个符号(0000和1111),这在计算机要测试0结果时非常不便。

优点

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

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