✨个人主页: 熬夜学编程的小林
目录
1、浮点数在内存中的存储
1.1、练习
#include <stdio.h>
int main()
{
int n = 9;
float *pFloat = (float *)&n;
printf("n的值为:%d\n",n);
printf("*pFloat的值为:%f\n",*pFloat);
*pFloat = 9.0;
printf("num的值为:%d\n",n);
printf("*pFloat的值为:%f\n",*pFloat);
return 0;
}

但是为什么会出现上面的结果呢?下面就从浮点数的存储来详细讲解此代码。
1.2、浮点数怎么转化为二进制
首先我们来个简单的例子:
把十进制小数5.25化为二进制小数,我们应该怎么操作?
我们分为以下几步:
1. 以小数点为界进行拆分;
2. 整数部分转为二进制相信大家肯定没问题
3. 小数部分采用的是"乘2取整法",当乘2之后小数部分得到0就停止计算
十进制小数5.25:
1、以小数点为界进行拆分,整数部分为5,小数部分为0.25
2、整数转化为二进制为101
3、小数部分采取“乘2取整法”,0.25*2=0.5,整数部分为0,小数部分为0.5,继续乘2,0.5*2=1.0,整数部分为1,小数部分为0,小数部分为0则停止计算。取的数字为整数部分数字,因此转化为二进制小数为0.01。
4. 合并结果:整数部分 + 小数部分,最终得到二进制结果为
101.01
.5. 二进制小数转化为十进制验算
101.01=1*2^2+0*2^1+1*2^0+0*2^-1+1*2^-2=5.25
以上就是浮点数化为二进制的步骤了,下面我们来看看更复杂一点的例子:
把十进制3.14
化为二进制:
1、以小数点为界进行拆分,整数部分为3,小数部分为0.14
2、整数转化为二进制为11
3、小数部分采取“乘2取整法”,0.14*2=0.28,整数部分为0,小数部分为0.28,继续乘2, 0.28*2=0.56,整数部分为0,小数部分为0.56,继续乘2, 0.56*2=1.12,整数部分为1,小数部分为0.12,继续乘2, 0.12*2=0.24,整数部分为0,小数部分为0.24,.............小数部分为0则停止计算。取的数字为整数部分数字。
1.3、浮点数的存储
V = (−1) ^S * M ∗ 2^E• (−1)^S 表示符号位,当S=0,V为正数;当S=1,V为负数• M 表示有效数字,M是大于等于1,小于2的• 2^E 表示指数位
对于32位的浮点数,最高的1位(第一位)存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。对于64位的浮点数,最高的1位(第一位)存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。


1.3.1、浮点数存的过程
1.3.2、浮点数取的过程
0 01111110 00000000000000000000000
0 00000000 00100000000000000000000
0 11111111 00010000000000000000000
1.3、题目解析
0000 0000 0000 0000 0000 0000 0000 1001
0 10000010 001 0000 0000 0000 0000 0000
总结
本篇博客就结束啦,谢谢大家的观看,如果公主少年们有好的建议可以留言喔,谢谢大家啦!