浮点数转换为十进制

2015-11-25

浮点数二进制表达的三个组成部分 14.45*10^3,只不过这里是以2为底数

浮点数是科学计数法,在二进制中类似于

符号位 指数位 尾数

S        E        M


32位单精度浮点数 三部分的位数分别为  

而64位双精度浮点数,指数部分为11位,尾数为52位。

三个部分的组成

  • Sign(1bit):表示浮点数是正数还是负数。0表示正数,1表示负数
  • Exponent(8bits):指数部分。类似于科学技术法中的M*10^N中的N,只不过这里是以2为底数而不是10。需要注意的是,这部分中是以2^7-1127,也即01111111代表2^0,转换时需要根据127作偏移调整。
  • Mantissa(23bits):基数部分。浮点数具体数值的实际表示。

转换过程

1.改写为二进制

  整数部分,和小数部分分别改写,以5.2为例,整数部分为101,小数部分0.2 = 0.125+0.0625+0.007825+0.003906252^-3+2^-4+2^-7+2^-8.... ,也就是                                    .00110011001100110011    

2.规格化

调整小数点,向右移或者向左移,保证小数点前面只有一个bit,且保证小数点前只为1,

规格化后为  1.0100110011001100110011* 2^2


3. 填充

指数部分是以127为偏移量的,相当于十进制中的0,将规格化后的指数部分加上127,就是浮点数的指数部分,129=10000001

注意,整数部分的1要舍去,因为在规格化后小数点前必然会有个1。

之后可以将该数转换为十六进制或者其他进制。

同样的,将一个二进制的浮点数转变成十进制,就是上述的逆过程,但要注意,去除符号位和指数后,将小数点偏移指数位减去127,再将剩下的二进制小数,转成十进制

附上一个浮点数转换工具:

http://www.h-schmidt.net/FloatConverter/IEEE754.html

原文地址:https://www.cnblogs.com/moon-lights/p/4994698.html