浮点型数据的相互转换
标准4字节浮点型在计算机里存储方式如下图
IEEE754标准中浮点数表示格式IEEE规定的浮点数表示法是一种科学计数法,用符号(正或负)、指数和尾数来表示,底数被确定为2。也就是说浮点数被表示为尾数乘以2的指数次方再带上符号。具体格式如下: 符号域 指数域 小数域 指数偏移量 单精度浮点数 1 位[31] 8位[30-23] 23位[22-00] 127 双精度浮点数 1 位[63] 11 位[62-52] 52 位[51-00] 1023 下面以单精度浮点数为例来介绍浮点数的三个区域:
符号域:符号域占1位,0表示正数,1表示负数。指数域:指数域共有8位,可表达的范围为:0~255。为能处理负指数,实际指数位存储在指数域中值减去一个偏移量(单精度为127,双精度为1023)。单精度浮点数的偏移量为127,故实际可表达的指数值的范围为-127~128。尾数域:尾数域共有23位。由于规范浮点数的小数点左侧必须为1,所以在保存尾数时,可以省略小数点前面这个1,从而腾出一个二进制位来保存更多的尾数。举例:比如对于单精度数而言,二进制的1001.101(对应于十进制的9.625)可以表达为1.001101 ×2^3,所以实际保存在尾数域中的
值为0011 0100 0000 0000 0000 000,即去掉小数点左侧的1,并用0 在右侧补齐。
(
整数部分(9)的计算:1001
小数部分(0.625)的计算:
0.625*2=1.25--------1
0.25 *2=0.5 ----------0
0.5 *2=1.0 -----------1
所以用二进制科学表示方式为:1.001101*2^3
)
实数与浮点数之间的变换举例例一:已知一个单精度浮点数用16进制数表示为:0xC0B40000,求此浮点数所表达的实数。
先转换为二进制形式(注意:对于负数二进制补码转换成十进制一定要:先取反,后加1)
C 0 B 4 0 0 0 0
1100 0000 1011 0100 0000 0000 0000 0000
按照浮点数格式切割成相应的域 1 1000 0001 01101 000000000000000000
经分析:符号域1 意味着负数;指数域为129 意味着实际的指数为2 (减去偏差值127);尾数域为01101 意味着实际的二进制尾数为1.01101 (加上隐含的小数点前面的1)。所以,实际的实数为:
= -1.01101 × 2^ 2=- ( 1*2^0 + 1*2^(-2) + 1*2^(-3) + 1*2^(-5) ) × 2^2
= -(1+0.25+0.125+0.03125)*4
= -1.40625*4
= -5.625
例二:将实数-9.625变换为相应的浮点数格式。
1) 求出该实数对应的二进制:1001.101,用科学技术法表达为:-1.001101 ×2^3;
2) 因为负数,符号为1;
3) 指数为3,故指数域的值为3 + 127 = 130,即二进制的10000010;
4) 尾数为1.001101,省略小数点左边的1后为001101,右侧0补齐,补够23位,
最终尾数域为:00110100000000000000000;
5) 最终结果:1 10000010 00110100000000000000000,用16进制表示:0xC11A0000。
2023-08-15 广告