移码
此条目过于依赖第一手来源。 (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/ (页面存档备份,存于互联网档案馆)