一级棒
一级棒,猫哥的个人主页
一级棒 - 编程园地 - 编程感想 - 观察浮点数在内存中的存放
发表时间:2005-01-16 00:00:00 关键词:编程,C++,VC,MFC,浮点数 点击:4697

浮点数就类似于我们生活中的科学记数法,
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
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]);
    }
}

  看猫哥的文章、听猫哥的语音,了解猫哥组织的各种采摘或旅游活动,请关注微信公众号《猫哥在线》,扫描以上二维码或者在微信中搜索“猫哥在线”、“maogezx”。
精选留言
以上留言由猫哥筛选后显示
本站特约顾问律师常州东晟律师事务所朱立律师(电话13915029670,QQ646146109)提醒您:
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!
搜索
Copyright©2000 - 2022 Eachfun.Com, All Rights Reserved 一级棒网络
苏ICP备15042862号-1