2010-08-10 156 views
10

我正在讀一本關於「位擺弄」,出現下面的公式:X-Y = X +¬y+ 1個問題

x-y = x+¬y+1 

但這似乎並沒有工作。例如:

x = 0100 
y = 0010 
x-y = 0010 
¬y = 1101 
¬y+1 = 1110 
x+1110 = 10010 

10010 != 0010...

哪裏我犯了一個錯誤(如果有的話)?

(本書是「Hacker's Delight」由亨利·沃倫。)

+1

注意,這與其說是「位擺弄」,因爲它是[「減法」的定義](http://en.wikipedia.org/wiki/兩%27s_complement) – 2010-08-10 22:48:17

回答

23

您只有四位系統!最終結果左邊的額外1不能存在。它應該是:

x = 0100 
y = 0010 
~y = 1101 
~y + 1 = 1110 
x + 1110 = 0010 

其他位溢出,而不是你的結果的一部分。您可能需要閱讀two's complement arithmetic

+0

非常感謝:)好解釋。感謝所有其他人。 – 0x90 2010-08-10 22:15:16

2

您攜帶額外位。在真正的電腦中,如果你溢出這個詞,這個位就會消失。 (實際上它被保存在進位標誌中)。

2

假設數字被限制爲4位,那麼第五個1將被截斷,使您留下0010

1

這是關於溢出。你只有四位,所以它不是10010,但是0010

1

只需添加到答案,2的補系統:

~x + 1 = -x 

x = 2。在4位中,即0010

~x = 1101 
~x + 1 = 1110 

而且1110是-2

相關問題