浮点数存储规则:
根据国际标准IEEE(电气和电子工程)754,任意一个二进制浮点数V,可以表示成以下的形式:
(-1)^S * M * 2^E
(-1)^S 表示符号位,S=0时,V为正数,S=1时,V为负数
M表示有效数字,大于等于1,小于2
2^E表示指数位。
我们以float类型(单精度浮点型)来举例子:
float类型为4个字节,即32个比特位,在其中S占据1个比特位,E占据8个比特位,而M占据剩余的23个比特位;
如图:
![](https://i-blog.csdnimg.cn/blog_migrate/3e056628685a8833fcf07abc5c23211c.png)
则根据国际标准IEEE(电气和电子工程)754,对于【浮点数:5.5】——>【二进制:101.1】
可用科学计数法将其转化为1.011*2^2
即对于上述浮点数而言:(-1)^S中S为0 ; 2^E中E为2 ; M为1.011;
则S所占的一个比特位中存储的为0;
而E中存储形式有所不同,因为8个比特位中不存在符号位,因而无法表示负数,所以在存储时会加上127(在读取数字时减去127,则可以达到存储负数的目的),所以在E所占8个比特位中存储的为129(10进制)——>1000 0001(二进制)
因为M总是:1 <= M < 2,则为了节省位,在存储时省略1,所以在M所占的23个比特位中存储的为01100000000000000000000
则浮点数5.5以float类型存储在内存中的数为:
0100 0000 1011 0000 0000 0000 0000 0000
而对于double类型(双精度浮点型)的数:
double类型为8个字节,即64个比特位,在其中S占据1个比特位,E占据11个比特位,而M占据剩余的52个比特位;
如图:
![](https://i-blog.csdnimg.cn/blog_migrate/933a6002557f8a929b2e831761fb24d7.png)
而其存储方式与float类似,唯一的区别在于:对于E的存储,在存储时加上的数为1023
其余数据的存储与float类型一致
对于浮点数的取出则参照上述方式还原即可
(感谢阅读~)