最近在讀《深入理解計算機系統》(蘭德爾 E. 布萊恩特),理解定點小數的補碼錶示時繞了些彎路,在這裏記下來,以作鞏固。
概念補充
補碼(Two's complement)、反碼(Ones' Complement)、原碼(Sign Magnitude):
注意,補碼和反碼中,撇號的位置不同。
術語補碼來源於這樣一個情況,對於非負數x,我們用2ⁿ - x(這裏只有一個2)來計算-x的n位表示;
術語反碼來源於這樣一個屬性,我們用[111...1] - x(這裏有很多個1)來計算-x的反碼錶示。
原碼、反碼、補碼規則編碼的二進制形式的有符號數和其實際值的轉換公式:
假設有一個有符號的二進制的數據: ,則其所表示的實際值爲:
原碼:
反碼:
補碼:
定點小數
定點小數即純小數,小數點的位置固定在最高有效數位之前、符號位之後,如圖1所示。定點小數的小數點位置是隱含約定的,小數點並不需要真正地佔據一個bit。
當 Xs = 0 時,該小數爲正值,其原碼和補碼錶示的形式相同。
其中,
⑴ 絕對值最大的正小數爲:
其實際值等於(通過移項及合併同類項,可知該等式成立):
⑵ 絕對值最小的正小數爲:
其實際值等於:
以8bit數爲例,最大正小數爲 0.111 1111 = 1 - 2⁻⁷;最小正小數爲 0.000 0001 = 2⁻⁷
當 Xs = 1 時,該小數爲負值,有原碼和補碼兩種表示形式(以下形式包含Xs位)。
⑴ 絕對值最大的負小數
① 原碼錶示
② 補碼錶示
⑵ 絕對值最小的負小數
① 原碼錶示
② 補碼錶示
可見,定點負小數的原碼錶示範圍爲: -(1 - 2⁻ⁿ) ~ -2⁻ⁿ;其補碼錶示範圍爲:-1 ~ -2⁻ⁿ。且n值越大,精度越高。