問題是要找到8位二進制數的二進制補碼(-00101.110)。帶分數的二進制數的二進制補碼
所以我不明白如何處理小數部分。我認爲1的補碼是11010.001 是11010.010的2的補碼嗎?這些是我需要的8位數作爲我對-00101.110的二進制補碼的最終答案嗎?
問題是要找到8位二進制數的二進制補碼(-00101.110)。帶分數的二進制數的二進制補碼
所以我不明白如何處理小數部分。我認爲1的補碼是11010.001 是11010.010的2的補碼嗎?這些是我需要的8位數作爲我對-00101.110的二進制補碼的最終答案嗎?
在二進制補碼錶示法中,負數的所有最高有效位都設置爲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
用十進制數字系統,我們使用具有單位,十位和百列,無符號二進制數這成爲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
能否請您參考http://cs.iupui.edu/~aharris/230/twosCompFloat.html –
我還是不太明白這一點。我的書中有一個例子,它表示分數0.01(基數2)有1.10(基數2)的補數和1.11(基數2)的2的補數。所以我就這樣解決了我的問題。 – user1869703