2012-02-07 87 views
9

我使用2的補數表示以二進制形式進行用2'補碼技術表示負數?

案例1負數:數-5

按照2的補技術:

轉換5的二進制形式:

00000101,然後翻轉比特

11111010,再加入1

00000001 

=>結果:11111011

要確保這是正確的,我重新計算爲十進制:

-128 + 64 + 32 + 16 + 8 + 2 + 1 = -5 

案例2:數-240

的採取相同的步驟:

11110000 

00001111 

00000001 

00010000 => recalculate this I got 16, not -240 

我誤解了一些東西?

回答

11

問題是你試圖用只有8位表示240。一個8位有符號數的範圍爲-128到127

如果不是與9位代表它,你會看到你得到正確的答案:

011110000 (240) 

100001111 (flip the signs) 
+ 
000000001 (1) 

= 

100010000 

= 

-256 + 16 = -240 
3

您可以用8位表示的最低負數是-128,即10000000

使用2的補:

 
128 = 10000000 
(flip) = 01111111 
(add 1) = 10000000 

你可以用N位表示的最低負數(當然是有符號整數)總是- 2^(N - 1)

4

你忘了-240在簽名時不能用8位表示嗎?