码迷,mamicode.com
首页 > 其他好文 > 详细

float类型的二进制表示方法

时间:2018-02-27 23:41:45      阅读:350      评论:0      收藏:0      [点我收藏+]

标签:href   链接   国际   数字   text   http   最大   float   tps   

摘自: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
来源:牛客网

float类型的二进制表示方法

标签:href   链接   国际   数字   text   http   最大   float   tps   

原文地址:https://www.cnblogs.com/StormWendy/p/8481111.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!