2012-08-25 127 views
3

有一個有趣的事實:2的(N)= 1的(N-1)

基於2的數量爲N的互補相當於1的補數的N減1。

2's(N) = 1's(N-1) 

以下結果很明顯。

2's(N) = 1's(N) + 1 

如何在第二個結果的幫助下證明第一個結果?

+2

它是2的補碼的定義中。你取1的補碼和1的相減。 – OmnipotentEntity

+0

不,我們給1的補碼加1得到2的補碼。 –

+0

對不起,我被騙了,我剛剛醒來,你當然是對的。 – OmnipotentEntity

回答

1

二進制補碼和1的補碼映射到負數區域的一個負數區域,以便於CPU處理。

在8位數字的情況下,1的補碼映射-127 ..- 0到128..255,另一方面,2的補碼映射-128 ..- 1到128..255。

您可以再次執行1的補碼和2的補碼,因此重複應用1的補碼和2的補碼只會讓您回到相同的位置。 (所以,我們不需要擔心有關自己的正數。)

如果你看到提供的範圍從128到255的每個數字被替換爲一個單一的數字,這個數字之間的差異爲1 2的補碼和1的補碼。

數學表達式如下:(對於8位數字):

2's(N) = 1's(N) + 1 
2's(N) = N^0xFF + 1 
2's(N) = N^0xFF + 0xFE^0xFF 
2's(N) = (N + 0xFE)^0xFF 
2's(N) = (N - 1)^0xFF 
2's(N) = 1's(N-1) 

理由爲每個步驟:

Step 1: Given 
Step 2: Definition of 1's complement 
Step 3: Identity 
Step 4: Distribution 
Step 5: Identity (within 1's complement system) 
Step 6: Definition of 1's complement 
+0

步驟5不正確。 (N + 0xFE)給出(N-2)。看到這裏:http://ideone.com/ovQvd –

+0

它在2的補碼系統中提供N-2。當你使用1的補碼系統時,你需要在處理溢出時增加一個(考慮到-0)。我以爲你知道,所以我沒有提到它。 – OmnipotentEntity

相關問題