C语言 —— 浮点型数据在内存中的存储
对于整型数据来说,数据在内存中以二进制补码的形式进行存储。
链接: (https://blog.csdn.net/lxl700204/article/details/105395052).
但是对于浮点型来说,在内存中并非以二进制补码形式存储。例如:
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;
}
运行结果为:

num 和 *pFloat 在内存中明明是同一个数,为什么浮点数和整数的解读结果会差别这么大? 要理解这个结果,一定要搞懂浮点数在计算机内部的表示方法。
根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:
(-1)^S * M * 2^E
1.(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。
2.M表示有效数字,大于等于1,小于2。
3. 2^E表示指数
举例来说: 十进制的5.0,写成二进制是 101.0 ,相当于 1.01×2^2 。 那么,按照上面V的格式,可以得出s=0,M=1.01,E=2。
十进制的-5.0,写成二进制是 -101.0 ,相当于 -1.01×2^2 。那么,s=1,M=1.01,E=2。
IEEE 754规定: 对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。

对于64位的浮点数,最高的1位是符号位S,接着

本文探讨了C语言中浮点型数据在内存中的存储方式,遵循IEEE 754标准。详细解释了浮点数的符号位、指数和有效数字的存储规则,并通过实例分析了不同情况下的浮点数表示,包括正负零、无穷大和正常数值的转换过程。
最低0.47元/天 解锁文章
1948

被折叠的 条评论
为什么被折叠?



