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 的补码的概念。