什么是 2 的补数?
为什么我们取 1 的补码并加 1?为什么我们在取 1 的补码后不减 1?
为什么计算机使用 2 的补码?
3 回答
什么是 2 的补数?
补数系统用于表示负数。因此,使用 2 的补数系统来表示负数。
更新
Q: What “2’s Complement System” says?
A: The negative equivalent of binary number is its 2’s complement. (1’s Complement +
1)
注意:需要 1 个额外的位来表示数字的符号。MSB(最高有效位)用作符号位。如果 MSB 为 0,则该数字为正数。如果 MSB 为 1,则该数字为负数。
1’s Complement Value 2’s Complement
011 +3 011
010 +2 010
001 +1 001
000 +0 000
111 -0 000
110 -1 111
101 -2 110
100 -3 101
-4 100
How '100' (3 bits) is -4?
MSB 用作符号,如果为 1,则为负,如果为 0,则为正。
-1 * 2^2 + 0*2^1 + 0*2^0 = -4 + 0 + 0 = -4
同样101(3位)是-3
-1 * 2^2 + 0*2^1 + 1*2^0 = -4 + 0 + 1 = -3
观察:
• In 1’s complement, using 3 bits, we represented 2^3 = 8 numbers i.e from -3 to +3.
• In 1’s complement, -0 and +0 are having 2 representation. (+0 is ‘000’ and -0 is ‘111’).
But mathematically +0 and -0 are same.
• In 2’s complement, using 3 bits, we represented only 2^3 = 8 numbers i.e from -4 to +3.
• In 2’s complement, -0 and +0 are having same representation.
• Since +0 and -0 in 2’s complement is having same representation,
we are left out with one more combination which is ‘100’ = -4.
为什么我们取 1 的补码并加 1?为什么我们在取 1 的补码后不减 1?
请参阅以下链接中的“为什么反转和添加一个作品”主题。如果我开始解释,这篇文章会变大。 http://www.cs.cornell.edu/~tomf/notes/cps104/twoscomp.html
为什么计算机使用 2' 补码?
- 由于硬件较少。如果计算机使用 2' 补码方式,它会使用加法电路进行减法运算。所以,更少的硬件!
- 如上例所示,+0 和 -0 具有相同的表示。(1 的补码和符号幅度表示对于 +0 和 -0 有 2 种不同的表示)。
- (不重要)您将能够使用 2 的补码表示一个额外的数字。(在上面的示例中,它的 -4 是使用 3 位的二进制“100”)。
来自维基百科的补语:
二进制补码系统的优点是加法、减法和乘法的基本算术运算与无符号二进制数的基本算术运算相同(只要输入以相同的位数表示,并且超出这些位数的任何溢出都将被丢弃从结果)。此属性使系统更易于实现并且能够轻松处理更高精度的算术。此外,零只有一个表示,消除了与负零相关的微妙之处,后者存在于一个补码系统中。
我们使用二进制补码而不是一个补码的原因是为了使算术尽可能简单。
考虑在一个补码中,1111 1111
和0000 0000
是相同的数字 - 通过减一,我们最终得到......相同的数字。这太痛苦了,不得不考虑 - 所以我们使用二进制补码,其中1111 1111
是 -1 - 通过减去一个,我们成功地减去了一个。万岁!
(第二个优势是我们可以在二进制补码中表示一个比在一个补码中的唯一数字 - 在二进制补码 -128 到 +127 中,而不是在一个补码中 -127 到 +127。)