IEEE754浮点数的表示形式
如:
- 值:(-1)X(1.M)X2E-1234
- S:表示符号位,表示整个数的符号位
- E:表示阶码,注意阶码采用移码的方式,没有符号位,
- M:表示尾码,采用原码表示,为了规范化,尾码的最高位是有效数字1后面的数,如机器原码:0.000 1010 0100,表示成对应的原码,应该将小数点移到从左往右第一个1的后面,同时将第一个1省略
- M开头是小数点后第一位,后面不都的用0补齐
移码的求法
移码是在原码的基础上加上一个偏置量,确保新的二进制码便于直观的进行比较。
如
- 负数:-100 0010,转换成补码:1011 1110
- 正数:+100 0010,转换成补码:0100 0010,
- 上述两个数对于计算机来说不易进行大小判定,,所全部加上偏置量1000 0000
- 负数的补码:1011 1110 对应的移码0011 1110
- 正数的补码:0100 0010 对应的移码1100 0010
- 上述两个数仅仅考虑数值部分,不需要考虑符号位,正数就比负数大。
- 求由原码求补码的快速方法
* 原码》》补码:除符号位不变,全部取反,末位加1
* 补码》》移码:符号位取反,其余不变
* 原码》》移码:全部取反,末位加1
- 注意:IEEE754求的移码,是在原补码的基础上加上2n - 1,以IEEE754的短浮点数为例,总共有8位阶码(原来用补码表示),统一加上0111 1111(27 - 1),原先的阶码8位,去掉一个符号位,总共七位数,表示范围-126 ~ +127(去掉一个0),加上偏置量表示范围:1 ~ 254
特殊值的判定
- 无穷:阶码最大,全为1,(根据移码的生成方法,是在原码上全部加上一个偏置量,并没有像补码一样将0和1倒置),尾数全为0。
- 0:阶码最小,全为0,尾数全为0。
考试题——将一个十进制数转换为32单精度型的浮点数
写出1056.75保存为浮点数时的格式
-
将1056.75转换成对应的二进制编码,整数部分和小数部分分开转,然后进行合并,结果为:0100 0010 0000 . 1100
-
将小数点移到最高位后面一位,总共移了10位,将最高位的1省略,前面用0补齐
-
阶码10的二进制编码(补码形式):0000 1010,加上偏置量0111 1111,结果为1000 1001
- 注意: 阶码的机器字长是8位,最高位是符号位,求移码是在补码的基础上加上偏置量
-
确定符号位:结果为正数,0
-
最终的浮点数编码:0 1000 1001 0000 1000 0011 0000 0000 000
- 如果不强求过程,可直接登录网站输入相关的数字直接获取对应的浮点数格式
- 网址:https://www.h-schmidt.net/FloatConverter/IEEE754.html