根据国际标准IEEE754,任意一个二进制浮点数V可以表示下面的形式:
(-1)^S*M*2^E
(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。
M表示有效数字,大于等于1,小于2。
2^E表示指数位。
#include<stdio.h>
int main()
{
int n =6;
float*pfloat=(float*)&n;
printf("n的值:%d",n);
printf("*pfloat的值:%f",*pfloat);
*pfloat=6.0;
printf("num的值%:d",num);
printf("*pfloat的值:%f",*pfloat);
return 0;
}
在运行代码之前可以大胆猜测下,第一个打印的数值肯定为6,按照我们整型在内存中储存的经 验,第二个打印的数值为9.0,第三个值为6,第四个值为6.0。
这里第二个和第三的数值和我们猜想的有很大的差异,说明浮点数在内存中的存储和整型是完全不相同的。
在正式讲解之前我们先了解一下小数的二进制位表示
注释:有的小数是无法正正好好用二进制表示的
例如 6.8储存到内存中就是6.90000019
例 5.5在内存中的储存
1.首先因为5.5是正数所以符号位S=0
2.IEEE规定M在内存中的存储需要把第一位去掉
1.011就储存011,这样做的目的是为了节省一位有效数字
3. 首先E的类型是一个无符号整数,64位的E是11个比特位,取值范围是0~2047,但是在科学计数法中E是可以表示负数 的,所以在内存存放E的真实值必须加上一个中间数127,例如2在内存中存储就是2+127=129 10000001