图片无法显示请移步原文地址原文地址
关于求移码
首先先介绍一下移码怎么求的。大家普遍求移码的方法应该都是先求补码再把符号位取反得到相应真值对应的移码。但是这里需要注意的是移码的定义。
移码就是在真值X的基础上加上一个常数(偏置值),通常这个常数取2^(n-1)
移码其实是一个无符号数,是没有符号位的,这里的n即二进制的位数(符号位+数值位)。因此只有在偏置值为2^(n-1)时才可以使用补码符号位取反的方式来求移码。
IEEE754移码的由来
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WY0oPkGp-1685590128059)(http://mjvvv.cn/pikachu/img/90778c3e-d932-4dc5-b85e-8a022f119f85.png)]
如图所示,8位二进制数所能表示的十进制真值范围是[-128,127]。求相应的移码:
-
对应于偏置值128的移码,统统加上128有十进制[0,255],对应的二进制取值范围有[0,255],其中移码0和255(对应于十进制真值-128和127)出于IEEE754标准舍去,于是移码对应的二进制数取值范围为[1,254]。
-
对应于偏置值127的移码,统统加上127有十进制[-1,254],其中-1根据无符号数取反的规则(从右往左第一个1不变,其他的统统取反,参考无符号数加减法)可以表示为11111111,因此对应的二进制数取值范围也为[0,255],其中移码0和255(对应于十进制真值-127和-128)出于IEEE754标准舍去,于是移码对应的二进制取值范围为[1,254]。
问题来了,为啥IEEE754选择偏置值为127的移码呢。注意观察上图,偏置为128的移码表示的真值范围为[-128,126],而偏执值为127的移码表示的真值范围为[-126,127],转化为十进制的浮点数有以下对应关系。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XtlW2k5X-1685590128061)(http://mjvvv.cn/pikachu/img/68a0b97f-7a73-44af-978c-7508bcf8139a.png)]
可见偏移值取127时,上下范围基本对称,相对合理点。因此选择偏置值为127的移码。