目录
1.例
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;
}
那么输出的结果又是什么呢?
2.浮点数存储规则
由此可见,num
和
*pFloat
在内存中明明是
同一个数
,为什么浮点数和整数的解读结果会差别这么大呢
?
要理解这个结果,一定要搞懂浮点数在计算机内部的表示方法:
根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成下面的形式:
(-1)^S * M * 2^E
(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。
M表示有效数字,大于等于1,小于2。
2^E表示指数位。
举例说明:
十进制的5.0,写成二进制是 101 .0 ,相当于 1.01×2^2 。
那么,按照上面的格式,可以得出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
位是指数</