電腦科學中,移碼(英語: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。

移碼的由來

  1. 數軸上,移碼所表示的範圍,恰好對應於真值在數軸上的範圍向正方向移動 個單元
  2. 二補數表示的好處在於去掉了負號,但人們很難從形式上判斷真值大小,與人們的習慣不符;因為二補數表示中符號也成了一位二進制的數,而移碼的表示中與二補數相差一個符號位,而且可以從移碼看出真值的大小,轉換方便。
對此進一步解釋:
-128[移]: 00000000
-127[移]: 00000001
-126[移]: 00000010
......
+126[移]: 11111110
+127[移]: 11111111

移碼的用途

移碼主要用於表示浮點數的階碼,在浮點數運算中有優勢。

移碼表示中的問題

  1. 對移碼運算的結果需要加以修正,修正量為2En,即對結果的符號位取反後才是移碼形式的正確結果。
  2. 移碼表示中, 0有唯一的編碼——1000…00,當出現000…00時(表示-2En),屬於浮點數下溢。

參考文獻

  1. IEEE 754:http://grouper.ieee.org/groups/754/頁面存檔備份,存於網際網路檔案館