1. 为什么阶码要加上偏移量127或1023呢?
我们知道,浮点数的表示分为三部分:数符、阶码、尾数。
其中阶码并非直接存储科学计数法的指数(如上图的指数6),而是会加上偏移(存储的是133,由6+127计算得来)。对于单精度浮点数,阶码部分占8位,偏移量为127;而对于双精度浮点数,阶码部分占11位,偏移量为1023。
为什么要这样设计呢?
下面以单精度浮点数为例进行说明。
①将阶码转换为无符号整数,简化硬件实现
要理解这点,有几个关键:
二进制数的阶码有正有负,就像十进制的指数一样
单精度阶码有8位,相当于一个byte,理论上能表示的数据范围是-128~127
实际上我们规定阶码的范围是-126~127,有正有负,加上偏移量127后的范围是1 ~ 254,变成了无符号整数,就不用考虑正负号了
总之,加偏移量后,指数可以表示为无符号整数,这简化了硬件的设计和运算逻辑。如果不使用偏移量,负指数需要特别处理,增加了硬件实现的复杂度。通过偏移,所有的指数都可以用统一的方式处理,无论是正数还是负数。
②避免阶码特殊值0和255
为什么不偏移量定位为128呢?
毕竟8位阶码理论上能表示的范围是-128 ~ 127,加上偏移量之后范围是