搜索
bottom↓
回复: 3

浮点数在C语言中的存储格式(理论与实际不一样)

[复制链接]

出0入0汤圆

发表于 2009-8-21 16:40:34 | 显示全部楼层 |阅读模式
浮点在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周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-8-21 17:55:30 | 显示全部楼层
没试过,关注

出0入0汤圆

发表于 2009-11-11 14:30:32 | 显示全部楼层
是不是这个也满足四舍五入啊,第二十四为应该是1,应该代表相应数量级上的0.5,这样四舍五入就会向前进一位,第二十三位就变成1了。仅供参考。

出0入0汤圆

 楼主| 发表于 2009-11-12 09:23:11 | 显示全部楼层
为了检验楼上所说,这里使用浮点数3.3,按照浮点的存储规则,可得出理论上的存储结果为0100 0000 0101 0011 0011 0011 0011 0011,表示成16进制为 0x40533333。通过上述程序验证如下:

(原文件名:1.JPG)
    运行结果如下:

(原文件名:2.JPG)
    在这里先将3.3表示为 1.1010 0110 0110 0110 0110 0110 0110 0110...2^1,从这里可以发现小数部分的第24位为0,如楼上所说,此时的结果正确。
   
    为了再次验证,这里再使用另一个浮点数3.4,它的二进制形式为1.1011 0011 0011 0011 0011 0011 0011 0011...取小数的23位为1011 0011 0011 0011 0011 001,小数部分的第24位为1,如果楼上所述正确,则此时的23位小数部分应该为1011 0011 0011 0011 0011 010,即第24位进一位,加到001上,得010。则可得出理论上的存储结果为0100 0000 0101 1001 1001 1001 1001 1010,表示为6进制为0x4059999a,通过软件验证如下:

(原文件名:3.JPG)
    运行结果为:

(原文件名:4.JPG)
    由上图可以看到,结果为0x4059999a,与上述结果吻合,说明楼上所述正确。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 13:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表