浮点数就类似于我们生活中的科学记数法,
1.567*10^5(一点五六七乘以十的五次方)——这是我们的写法,
中间那个“10”是基数,我们可以不关心,只关心两个数:
1.567和5,
这两个数我们称之为尾数和指数
当数增长10倍时,尾数不变,指数大1,
(我们等会儿要利用这个特点来观察计算机里的存放)
但是计算机只认识二进制,
所以计算机里的浮点数是以“二的多少数方来表示的”
比如“1024”,是二的10次方
2048是二的11次方,512是二的9次方
那么,这些数据在内存中的存放一定有点关系。
还有:8、4、2、1、0.5、0.25、0.125、0.0625……它们存在什么关系?
还可以试试1000、1001、1002、1003、1004,它们的指数相等,尾数是什么关系?
另外,还还会有更大的发现:
你输入1000、1000.1、1000.01、1000.001、1000.0001,看看浮点数究竟有多精确。
是不是1000.001变成1000.000977了?
浮点数占四个字节,共32位,
其中某些位表示尾数,某些位表示指数,不存放基数,
希望你能弄明白尾数占多少位,指数占多少位。
下面的程序可以帮你去认识一下:
//观察浮点数在内存中的存诸
//作者:偷猫
#include <stdio.h>
union FloatData
{
float f;
unsigned char h[4];
};
void main(void)
{
FloatData t;
float temp = 0;
while(
(temp > (100+0.0001))
|| (temp < (100-0.0001))
)
{
printf("请输入一个数,输入100表示结束:");
scanf("%f",&temp);
t.f = temp;
printf("%f在内存中的存放为:%2x %2x %2x %2x\n",t.f,t.h[0],t.h[1],t.h[2],t.h[3]);
}
}
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!

CC
未填
未填
未填
时间:2008-11-07 10:47:00