2013-02-12 137 views
2

用N位表示的数字的2的补数是2^N数。例如:如果number是7(0111)并且我用4位表示它,那么它的2的补码将是(2^N-number),即(2^4 -7)= 9(1001)
为什么我们在做2的补码时需要加1

7==> 0111 
1's compliment of 7==> 1000 
1000 
+ 1 
------------- 
1001 =====> (9) 

在计算2的一些补充,我们做以下步骤:1。 做数量的补 2.添加一个步骤1的结果

我明白,我们需要因为我们正在进行否定操作,所以要补数。但为什么我们添加1?

这可能是一个愚蠢的问题,但我很难理解逻辑。用上面的例子来解释(对于数字7),我们做补码并得到-7,然后加+1,所以-7 + 1 = -6,但仍然得到正确的答案,即+9

回答

10

你的错误在于“我们恭维得到-7”。要明白为什么这是错误的,取7的补码并加7。如果它是-7,你应该得到零,因为-7 + 7 = 0.你不会。

7的补码是1000。加7,你得到1111。绝对不是零。你需要再添加一个才能得到零!

数字的负数是您需要添加到零的数字。

如果您将1添加到...11111,您会得到零。因此-1被表示为全部1位。

如果你添加一个数字,比如说x,它的1的补码~x,你会得到所有的1位。

因此:
〜X + X3 = -1

添加1至两侧:
〜X + X3 + 1 = 0

从两侧

减去X:
〜X + 1 = -x

4

+1被添加以便在技术中的结转被照顾。

以7和-7为例。

如果您代表7 00000111

为了找到-7:

反转所有位并添加一个

11111000 -> 11111001

现在你可以添加以下标准的数学规则:

00000111 
+ 11111001 
----------- 
    00000000 

对于t他的电脑这个操作比较容易,因为它涉及到基本上比较一点一滴地携带一个。

相反,如果你代表-7为10000111,这没有任何意义:

00000111 
+ 10000111 
    ----------- 
    10001110 (-14) 

添加它们,你就会像参与分析第一位,并转化值更复杂的规则。

A more detailed explanation can be found here.