移码

在计算机科学中，移码（）是一种将全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/ 

Category:計算機算術