C语言:浮点数float的储存方式。

文章介绍了IEEE754标准下浮点数的存储方式,包括符号位S、指数E(需要加上偏移值127或1023)和尾数M。当E全为0时,表示小数;全为1时,可能表示无穷大或NaN。该标准应用于内存中浮点数的存储和提取。
摘要由CSDN通过智能技术生成

IEEE754标准:(-1)^S*1.M*2^E按照这个公式进行存放

(-1)^S:符号位s=0,则为1是正;s=1,则为-1是负.

1.M:表示大于等于1,并且小于2的数字。M则是≥0<1的数字

2^E:表示一个二进制数字,通过科学计数法后得到数字。

如:5.5

二进制为:101.1 --->可以表示为:(-1)^0*1.011*2^2

则:S=0,M=011,E=2

在内存中的存储方式:

        S存放在第一位表示正负

        E放中间float是8个bit位,double是11个bit位

        IEEE754规定了E中存放的第一位不用来表示正负,但是又避免不了有负数,比如:0.15--------------->(-1)^0*1.5*2^(-1)。因此,IEEE754规定将这里得到的数+127(double:+1023),然后再存入E中, float类型的范围在[-127,128]。(这里我有一个问题,为什么不给符号位呢?给了范围也在[-128,127],这样的区别应该也不大吧...如果有大佬可以解决这一疑问请私信我,或者评论,感谢!!!)

        M在float中占23bit位,在double中占52bit位,得到的M在后面补0,比如前面说的5.5,得到1.011则M=011存放时,float存放的M就是:0110000000000000000000(23bit)

        那看看5.5再内存中的存放:101.1 --->可以表示为:(-1)^0*1.011*2^2

        S=0(5.5是正数)

        E=2,IEEE754规定要+127因此,E=2+127=129

        M=011

        SEM带入得到float类型:0(S-1bit)10000001(E-8bit)011(补0)00000000000000000000(M-23bit)

        最后就是:01000000101100000000000

        

        内存:

         完全没问题。

 

上面是存放

下面是取出

 这是正常情况,这么放也就这么取。

IEEE754还规定了,E为全0E位全1的情况

补充:

E全为0:

        1-127(1-1023),0.xxx,原本是0-127,1.xxx。(向后退了一位)。

                

如果有错误的还麻烦大佬们提醒一下,博主也是在学习当中,非常热爱计算机领域!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

srhqwe

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

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

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

打赏作者

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

抵扣说明:

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

余额充值