移碼
此條目過於依賴第一手來源。 (2012年9月21日) |
此條目可參照英語維基百科相應條目來擴充。 |
在電腦科學中,移碼(英語:Offset binary)是一種將全0碼對映為最小負值、全1碼對映為最大正值的編碼方案。移碼沒有標準,但通常對於n位二進制數,偏移量K = 2n−1——這使得真值0的編碼的最高位為1、其餘位均為0,相當於二補數表示的最高位(符號位)取反;另外,移碼在邏輯比較操作中可以得到和真值比較相同的結果,二補數則若且唯若符號相同時邏輯比較操作的結果和真值比較相同,否則比較結果將顛倒(負值比正值大)。
範例
-120D = -01111000B(真值)
原碼:11111000
一補數:10000111
二補數:10001000
移碼:00001000
這樣的移碼也可以叫做偏移值為128的移碼,也是標準移碼,即10000000B+(-1111000B)=10000000B+(10001000B)=00001000B。這樣移碼就可以表示為原數的二補數加上偏移值。在IEEE 754浮點數表示中移碼是非標準的,它的偏移值為2k-1,也就是說對於單精度浮點數的偏移值為127。
移碼的由來
- 在數軸上,移碼所表示的範圍,恰好對應於真值在數軸上的範圍向正方向移動 個單元
- 二補數表示的好處在於去掉了負號,但人們很難從形式上判斷真值大小,與人們的習慣不符;因為二補數表示中符號也成了一位二進制的數,而移碼的表示中與二補數相差一個符號位,而且可以從移碼看出真值的大小,轉換方便。
- 對此進一步解釋:
- -128[移]: 00000000
- -127[移]: 00000001
- -126[移]: 00000010
- ......
- +126[移]: 11111110
- +127[移]: 11111111
移碼的用途
移碼主要用於表示浮點數的階碼,在浮點數運算中有優勢。
移碼表示中的問題
- 對移碼運算的結果需要加以修正,修正量為2En,即對結果的符號位取反後才是移碼形式的正確結果。
- 移碼表示中, 0有唯一的編碼——1000…00,當出現000…00時(表示-2En),屬於浮點數下溢。
參考文獻
- IEEE 754:http://grouper.ieee.org/groups/754/ (頁面存檔備份,存於網際網路檔案館)