2013-02-12 136 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.