C语言-浮点型数据在内存中是怎么存储的呢?

1.前言:

        上一篇我简单讲了一下整形数据是怎么存储的,这一章那我就继续简单的讲述一下浮点型的数据是怎么样存储的,我讲两个数据类型分开讲,那么说明它们在内存中存储的方式就是不一样的了,那么浮点型数据到底是怎么存进去的呢,首先先看一下下面一段代码和结果。

2.浮点型数据在内存中的存储规则

        从上面程序可以 看出,一开始是以整形数据存储在内存中,但是我强转成浮点型指针来接受整形类型的指针,当解引用的时候 就是以浮点步长来看待这个整形数据,如果两个类型的数据存储一样的话,那么前两个值打印出来会相等,但是显而易见的是不相等。为什么呢?

        这里说一下数据存进内存中都是以二进制的形式,不管是整形数据,还是浮点型数据。我们知道float浮点型是4个字节,32位,这里我从左往右位增长计算,浮点数数据的第一位存的是符号位S(0/1表示正数/负数),后面8位存的是E,最后23位存的是W,那么什么是SEW呢,根据国际标准IEEE任意一个二进制浮点数V都可以表示为:(*表示为乘法;^表示为多少次方)V=(-1)^S * W * 2^E。这里的E入内存中的时候要➕上127,这里的W需要表示为1.xxx*2^E,W存入的时候会省略前门的1,是直接吧xxx存进去。

        下面画图理解一下:

        现在我们在来看看上面的那段代码就能明白为什么f为什么==0,x为什么那么大了,因为当2为整形存储的时候二进制为00000000000000000000000000000010,当要以浮点型拿出来的时候,浮点型的规则就是S=0,W = 0.00000000000000000000010,E = 1-127=-126(当数据里的E是全0的时候,拿出来的时候E=1-127,W前面就不用加上1),所以f==无限接近于0的数,为什么x那么大,上图也分析过了,浮点型二进制存进去的数据为:01000000000000000000000000000000,这个数以整数的形式直接输出就是一个很大的数字。

3.总结

        这里我也只是简单的描述了一下浮点型存储在内存中的规则,一个浮点型数据先转换成二进制数据形式,然后转换成1.xxxx*2的多少次方形式最后看是正数还是负数就可以拿到S M E三个数的值,最后W省略前面的1直接放入后面的23位中,E则是加上一个127后存入前面8位中,S看正负存在第一位。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Aang丶江辞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值