看流星社区

 找回密码
 注册账号
查看: 2332|回复: 0

C++:浮点数的存储方式

[复制链接]

该用户从未签到

发表于 2013-3-18 09:05:20 | 显示全部楼层 |阅读模式
float内存存储结构(共4字节,32位分别如下):

  31 30 29----23 22----0

  实数符号位 指数符号位 指数位 有效数位

  其中实数符号位0表示正,1表示负;指数符号位1表示正,0表示负

  float在计算机中的存储计算方法:

  1. 先将这个实数的绝对值化为二进制格式,方法是:实数的整数部分是除2取余和小数部分是乘2取整

  2. 将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边。

  3. 从小数点右边第一位开始数出二十三位数字放入第22到第0位。

  4. 如果实数是正的,则在第31位放入“0”,否则放入“1”。

  5. 如果n 是左移得到的,说明指数是正的,第30位放入“1”。如果n是右移得到的或n=0,则第30位放入“0”。

  6. 如果n是左移得到的,则将n减去1后化为二进制,并在左边加“0”补足七位,放入第29到第23位。如果n是右移得到的或n=0,

  则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位。

  根据上面那个步骤得:

  (1). 23.172001二进制形式为:0001,0111.0010,1100,0000,1000,0100,0001....

  (2)左移4位得:1.0111.0010,1100,0000,1000,0100,0001

  (3)取小数点后23位得: 0111.0010,1100,0000,1000,010(这23位为float数二进制码的后23位)

  (4)第31位: 0

  (5)第30位: 1

  (6)左移4位,4的二进制0011,不足7位则:0000,011

  最后得23.172001在计算机中的二进制表现形式为:0100,0001,1011,1001,0110,0000,0100,0010

  二进制转16进制得:41A96042
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-6 00:59

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

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