zoukankan      html  css  js  c++  java
  • float类型的二进制表示方法

    摘自:http://www.duote.com/tech/5/14691.html

    根据国际标准IEEE 754,任意一个二进制浮点数V可以表示成下面的形式:
      V = (-1)^s×M×2^E
      (1)(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。
      (2)M表示有效数字,大于等于1,小于2。
      (3)2^E表示指数。

    IEEE 754规定,对于32位的浮点数,最高的1位是符号位s,接着的8位是阶码E,剩下的23位为有效数字M。

    符号位S 阶码(E+偏移量) 尾数M
    1位 8位 23位


    (1)尾数M

    前面说过,1≤M<2,也就是说,M可以写成1.xxxxxx的形式,其中xxxxxx表示小数部分。IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。

    (2)阶码

    阶码 = 指数 E+  偏移量,这种阶码表示方式为移码。据猜测在计算机中存储的是阶码,实际求值的时候需要减去偏移量。

    阶码为一个无符号整数(unsigned int)。这意味着,如果E为8位,它的取值范围为0~255,但有下面的情况:

    • 当阶码为全0且尾数M也为全0时,表示的真值X为零,结合符号位S为0或1,有正零和负零之分。
    • 当阶码为全1且尾数M也为全0时,表示的真值X为无穷大(∞),结合符号位S为0或1,有+∞和-∞之分。如果M不全位0,表示这不是一个数(NaN)。

    除去E用全0和全1(255)表示零和无穷大的特殊情况,因此,阶码的取值范围变为1~254,为了表示小数,设置偏移量为127,那么实际表达的数值的指数范围为-126 ~ +127.

    求浮点数最大表示的整数是多少:

    那么,根据X = (-1) s ×(1.M)×2  E-127   ,有
    最大值为 (1.11111.....1)2 ×2127 =(1+1-2-23) ×2 127 = (2-2 -23) ×2 127 = 2128-2-104

    作者:牛客2862122号
    链接:https://www.nowcoder.com/questionTerminal/68eb1274b8ed4ead8d1b3b27a0c54b8b
    来源:牛客网

  • 相关阅读:
    css3--简单的加载动画
    background--详解(背景图片根据屏幕的自适应)
    css--两行显示省略号兼容火狐浏览器
    tortoisegit--无法commit
    vim--学习
    JavaScript--数据结构与算法之图
    JSONP
    数据结构--只用位运算实现加减乘除操作
    剑指offer——不用加减乘除做加法
    shop--10.前端展示系统--首页展示(后台)
  • 原文地址:https://www.cnblogs.com/StormWendy/p/8481111.html
Copyright © 2011-2022 走看看