移码

计算机科学中,移码(英语: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/页面存档备份,存于互联网档案馆