zoukankan      html  css  js  c++  java
  • 浮点数转换为十进制

    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

  • 相关阅读:
    prtg
    java实现第六届蓝桥杯穿越雷区
    java实现第六届蓝桥杯穿越雷区
    java实现第六届蓝桥杯穿越雷区
    java实现第六届蓝桥杯穿越雷区
    java实现第六届蓝桥杯穿越雷区
    java实现第六届蓝桥杯显示二叉树
    java实现第六届蓝桥杯显示二叉树
    java实现第六届蓝桥杯显示二叉树
    java实现第六届蓝桥杯显示二叉树
  • 原文地址:https://www.cnblogs.com/moon-lights/p/4994698.html
Copyright © 2011-2022 走看看