C语言浮点数据在内存中的存储方式

float在内存中的存储遵循IEEE 754标准。在C/C++中,float类型占4个字节即32位 , 这32位分成了3部分:
在这里插入图片描述
符号位最为简单,如果你存储的是正数那么符号数就是0。如果是负数,则为1。

下面,我以13.625为例说明阶码与尾数的表示方法。首先,我们取出13.625的整数部为13。对其使用短除法(对该数除以2,直至不能再除的一种方法)结果如下
在这里插入图片描述
将各余数自下而上排列,则得到了13的二进制表示。之后,取出13.625的小数部分为0.625对其每次乘2取出整数留下小数,直至得到1。结果如下
在这里插入图片描述
自上而下将取出的整数排列好,即得0.101。

这样我们就得到了13.625的二进制表示。为1101.101。之后我们需将小数点移动至整数部只有一位。移动后得到1.101101。在此我们将小数点移动了三位。因而三即是该数的指数。而阶码则为指数+127(加127是C语言的内在逻辑,在此我们并不深究。)因而我们得到了13.625的阶码,为130。二进制表示10000010。

至于最后的尾数,将原先得到的1.101101去掉整数部分后在后面补齐17个0即可。(float类型的尾数有23位,若不够,在后补齐0即可。)

在这里插入图片描述
最后我们得到了13.625的存储数据
在这里插入图片描述
转换成16进制后为 41 5A 00 00

程序验证:

	float a = 13.625;
	printf("%08X\r\n",*(unsigned int*)&a);

在这里插入图片描述
参考:
https://blog.csdn.net/yansmile1/article/details/70145416/
https://blog.csdn.net/itworld123/article/details/78914969
https://zhuanlan.zhihu.com/p/82761324
https://blog.csdn.net/qwertyuoi123456/article/details/53379068

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吾爱技术圈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值