浮点数在内存中的存储

本文详细介绍了浮点数在计算机中的表示方式,包括二进制转换、浮点数的存储公式以及不同指数状态下的解析方法。讨论了float和double类型的存储布局,并解释了如何从存储形式还原原始数值。此外,还涵盖了特殊情况,如零、无穷大和非数字的表示。
摘要由CSDN通过智能技术生成

首先得知道每一位数都有自己的权重,举个例子:5转换位二进制是101,这里第一个1的权重是2^2,0的权重是2^1,最后面的1是2^0 那如果在往后走就是2^-1即0.5,这样就可以写出5.5的二进制。

浮点数的存储遵循一个公式:(-1)^S*M*2^E 这里(-1)^S表示的时符号位如果S为1表示的是负数,如果S为0表示的是正数,M表示的是有效位,取值范围是1-2,例如上边的5.5的M就是1.011,E表示的是指数,原来的二进制位中的小数点向左移动几位E就是几。

得到了S.M和E,就该把他们存起来了float中第一位存放符号位,后面8位存放指数E剩下的23位存放M;在double类型中,第一位存放符号位,后面的11位存放指数E,最后的52位存放M。

因为M都是属于(1,2)的所以M的前面都是1.xxx那在存放的时候就可以省略到时候还原在加上去就可以了,那每一个M都在原来的基础上少一个固定的1就可以多存放后面的以为数值使存储的精度更高。

这里规定E位无符号数,那么就没有负数,但是存储的数值可能是负数,为了防止出现这样的情况在存储E时加上中间值然后存储,float的E存储时+127然存储,double的E加上1023然后存储。

 

浮点数的取出

分为三种情况

1.E不全为0或不全为1

E的现有值-127(1023)得到E的真实值,将有效位的前面加上1 取出符号位,按公式:(-1)^S*M*2^E在转成十进制就得到存储前的数值了

2.E全为0

这时候指数E直接为-126或者-1022,有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。

 

 

3.E全为1

如果M全为0,该数表示的是+-无穷大的数

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bite-ccc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值