分享

浮点型数据在内存中的存放形式 - 已解决 - 搜搜问问

 kimbaku 2011-03-16
单精度浮点数:1位符号位,8位指数位,23位有效数字。
双精度浮点数:1位符号位,11位指数位,52位有效数字。
计算规则:数字 = 有效数字*2^指数*符号
提问人的追问   2009-10-13 12:59
那个计算规则没看懂···不知道什么意思···请高手再详细一些!谢谢
回答人的补充   2009-10-13 14:29

举个例子:234.0用float类型表示时使用4字节保存,内容是 0x436a0000。换成二进制表示为01000011011010100000000000000000,其中符号为0,指数为10000110,有效数字为11010100000000000000000。指数换成10进制为134,减去127为7。有效数字其实是小数部分,加上省略的整数部分1为1.110101,将小数点向右移7位就相当于乘以2的指数次幂,即11101010,换成10进制为234。查看浮点数的内存表示可以用如下程序看:

float a = 234;

char c[4];

memcpy(c, a, sizeof(float));

c中的内容即是a的内存表示。

提问人的追问   2009-10-13 18:51
大侠,问下,哪里来的省略的整数1啊?
回答人的补充   2009-10-14 09:07
有效数字表示法是这样的:234表示成2.34e2,其中小数点前面的是整数部分,小数点后面的是小数部分,e后面的是指数部分。用10进制表示时整数部分是大于0小于10的数,而用二进制表示时就始终是1,使用浮点数表示法时单精度浮点数和双精度浮点数都省略这个整数部分。浮点数表示法中的指数部分是实际的指数加上一个固定的基数,单精度浮点数这个基数是127,双精度浮点数是1023。详细说明见 http://www./yingyong/080502/15414593-2.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多