2014-01-22 158 views
1

問題是要找到8位二進制數的二進制補碼(-00101.110)。帶分數的二進制數的二進制補碼

所以我不明白如何處理小數部分。我認爲1的補碼是11010.001 是11010.010的2的補碼嗎?這些是我需要的8位數作爲我對-00101.110的二進制補碼的最終答案嗎?

回答

0

在二進制補碼錶示法中,負數的所有最高有效位都設置爲1.假設您將這些數字存儲爲8位,其中2位在「二進制點」的右側。

根據定義,x + -x = 0,所以我們可以這樣寫:

0.5 + -0.5 = 0.10 + 111111.10 = 0 // -0.5 = 111111.10 
0.25 + -0.25 = 0.01 + 111111.11 = 0 // -0.25 = 111111.11 
0.75 + -0.75 = 0.11 + 111111.01 = 0 // -0.75 = 111111.01 

等。

使用8位這樣,你可以存儲最多的是

011111.11 = 31.75 

的最小正數是

000000.01 = 0.25 

最少負數是

111111.11 = -0.25 

而最小的(也就是最負的)是

100000.00 = -32 

Source

用十進制數字系統,我們使用具有單位,十位和百列,無符號二進制數這成爲1,2,4等2到列數的電源。

例如

2^0 (1), 2^1 (2), 2^2 (4). 

在二進制補碼的最顯著位(MSB)變爲負。對於三位數字,行將保存這些值;

-4, 2, 1 
0 0 1 => 1 
1 0 0 => -4 
1 0 1 => -4 + 1 = -3 

因此,定點系統保持的位的值不變。

-1永遠是111.000

-0.5添加0.5到它:111.100

在你的情況110100.10等於-32 + 16 + 4 + 0.5 = -11.5。你所做的是創建-12然後加0.5而不是減0.5。

你真正想要的是-32 + 16 + 2 + 1 + 0.5 = -12.5 = 110011.1

+0

能否請您參考http://cs.iupui.edu/~aharris/230/twosCompFloat.html –

+0

我還是不太明白這一點。我的書中有一個例子,它表示分數0.01(基數2)有1.10(基數2)的補數和1.11(基數2)的2的補數。所以我就這樣解決了我的問題。 – user1869703