|
浮点在C语言中的存储格式
IEEE规定的浮点数的机器表示:
32位机器的 float 是4字节的,共32位。
第1位是符号位,接着8位指数位,接着23位基数位。
我们来看看浮点数3.2 :
3.2的二进制表示为1.1001100110011001100110011...2^1,由于第一位总是为1,去掉第一位,得1001100110011001100110011...,取前面23位,则基数部分为10011001100110011001100。
我们再来看指数部分,指数是1,根据规定,指数统一+127再转换为无符号8位2进制数,1+127=128 (1000 0000)。
最后加上符号位,最终得出3.2在内存中的表示形式,即:
0100 0000 0100 1100 1100 1100 1100 1100
利用Microsoft Visual C++ 6.0验证如下:
#include <stdio.h>
void main()
{
float *f,a = 3.2f;
unsigned int *p;
f = &a;
p = (unsigned int *)f;
printf("a = %f\n",a);
printf("%x ",*p);
printf("\n");
}
(原文件名:图片1.jpg)
结果显示为404ccccd,即为01000000 01001100 11001100 11001101。我们发现与上面的分析结果有点不一样,即最后一位为1,而上面所得的结果为0。
请各位前辈指教。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|