浮点数的内存结构
根据IEEE的标准,浮点数的定义如下
2)E全为0。这时,浮点数的指数E等于1-127(或者1-1023),有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。
3)E全为1。这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);如果有效数字M不全为0,表示这个数不是一个数(NaN)。
符号位 | 指数位 | 小数部分 | 指数偏移量 | |
---|---|---|---|---|
单精度浮点数 | 1 位[31] | 8位 [30-23] | 23位 [22-00] | 127 |
双精度浮点数 | 1 位[63] | 11 位[62-52] | 52 位[51-00] | 1023 |
我们以单精度浮点数0.5来说明:
二进制表示: 0011 1111 | 0000 0000 | 0000 0000 | 0000 0000
十六进制表示:0x3f000000
符号位:0,表示为正数
指数位 :126-127=-1
二进制为01111110 十六进制为0x7e 十进制为126
科学计数法中的E是可以出现负数的,所以IEEE 754规定,E的真实值必须再减去一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。
指数E的计算方式分三种情况:
1)E不全为0或不全为1。则指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1。
2)E全为0。这时,浮点数的指数E等于1-127(或者1-1023),有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。
3)E全为1。这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);如果有效数字M不全为0,表示这个数不是一个数(NaN)。
小数部分:由于指数部分既不是全为1,也不是全为0,所以
有效数字部分前要加1,变为1.0
结果:1.0乘以2的-1次方为0.5