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.
求浮点数最大表示的整数是多少:
作者:牛客2862122号
链接:https://www.nowcoder.com/questionTerminal/68eb1274b8ed4ead8d1b3b27a0c54b8b
来源:牛客网