- 论坛徽章:
- 0
|
10可用积分
如题,这两天研究了一下IEEE浮点数表示法,根据一位dx的提示看了一下这个帖子
http://blog.csdn.net/zhaomu/archive/2006/06/27/840462.aspx
然后我在solaris8上面用gcc作了一个实验,实验的结果和我期望的相差很远
1.源代码
>cat f.c
#include<stdio.h>
int main(void){
float f=1.0f;
float f2=2.0f;
float f3=3.0f;
float f4=4.0f;
float f5=0.0f;
int *pf;
int *pf2;
int *pf3;
int *pf4;
int *pf5;
pf=(int*)&f;
pf2=(int*)&f2;
pf3=(int*)&f3;
pf4=(int*)&f4;
pf5=(int*)&f5;
printf("%x\n",*pf);
printf("%x\n",*pf2);
printf("%x\n",*pf3);
printf("%x\n",*pf4);
printf("%x\n",*pf5);
return 0;
}
2.运行结果
> gcc f.c && ./a.out
3f800000
40000000
40400000
40800000
0
3.我看了一下这几个数字的2进制表示形式,和IEEE浮点表示法相差很远:
首先高位是3(0011或者4(0100),符合第一位是0的条件(正数)。但是指数位的值也太大了。
例如3f8就是001111110100,指数位是(01111110),远远不止1.0f吧,这是怎么回事呢?
4.这里的printf输出浮点数的值是用了一个类型转换,请问在这里机器硬件是big-endian还是small-endian对于输出结果有没有影响,也就是说,我应该把3f800000反过来看? 打印了5个数字看起来只有0是正确的。
10分感谢! |
最佳答案
查看完整内容
再看看这个:测试一下其中的代码。详细讲解IEEE浮点数[原创] http://breakman.bokee.com/4651854.html
|