2的补码在二进制数系统中负数表示中相对于1的补码有什么优势?它如何影响在二进制系统中以某一位表示的数值范围?
−(2^(N−1)−1)到2^(N−1)−1
内的整数,而补码可以表示范围在−2^(N−1)到2^(N−1)−1
内的整数。 - Prince主要的优点是:
在1's补码中,有一个-0
(11111111
)和一个+0
(00000000
),即同一0
的两个值。另一方面,在2's补码中,只有一个0
的值(00000000
)。这是因为
+0 --> 00000000
和
-0 --> 00000000 --> 11111111 + 1 --> 00000000
在使用1进行加法或减法等算术运算时,我们必须添加一个额外的进位位,即结果中要加上1
才能得到正确答案,例如:
+1(00000001)
+
-1(11111110)
-----------------
= (11111111)
但正确答案是0
。为了得到0
,我们必须将一个进位比特1
加到结果中(11111111 + 1 = 00000000
)。 +1(00000001)
+
-1(11111111)
-----------------
= 1 00000000
在二进制补码表示中,零值是由所有位都设为零而唯一表示的:
**
** 当你在二进制补码表示中对两个带符号整数执行算术运算(例如加法、减法、乘法、除法)时,你可以完全使用与两个无符号整数相同的方法(也就是没有符号位的非负整数)... 除了,你要抛弃最高位进位(或借位,对于减法)
这种二进制补码表示的属性是如此方便,以至于今天几乎每台通用计算机都使用二进制补码。 为什么?因为使用二进制补码,我们不需要针对涉及负值的算术运算使用特殊算法(因此也不需要额外的电路)。
二进制补码并不是用于表示负数而是一种逆运算。
这意味着您可以执行A + B'(其中B'是B的二进制补码)以得到A - B,这意味着您可以使用加法器来完成所有操作,而无需使用减法器。