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.