float的内存表达方法,谁帮忙看看解释一下

ccccj 2008-11-09 10:50:21
float i=0.456;
在内存中这样表示3ee978d5 分开后就是0(符号) 01111101(指数) 11010010111100011010101(尾数)
通话上面3部分二进制,怎样理解转换到0.456啊?

float i=2.456; 内存表示401D2F1B 分开后就是0 10000000 00111010010111100011011
又应该怎么理解从而进制到2.456啊?
高手们回答一下吧,谢谢了
...全文
130 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
boxer_tony 2008-11-10
  • 打赏
  • 举报
回复
可以参见:http://blog.pfan.cn/article.asp?id=14811
boxer_tony 2008-11-10
  • 打赏
  • 举报
回复
小数点前面的指数为正,后面的为负即可。
boxer_tony 2008-11-10
  • 打赏
  • 举报
回复
0.0111010010111100011011B
=2^(-2) + 2^(-3)+ 2^(-4) + 2^(-6) + 2^(-9) + ...
=0.4560000896453857
=0.456 (去掉后面的无效数字)
tailzhou 2008-11-09
  • 打赏
  • 举报
回复
float i=0.456; 0(符号) 01111101(指数) 11010010111100011010101(尾数)

1.11010010111100011010101B * 2^(01111101B-01111111)
== 1.11010010111100011010101B *2^(-2)
==0.0111010010111100011010101B

你比较一下2.456二进制的小数部分:
10.0111010010111100011011B
ccccj 2008-11-09
  • 打赏
  • 举报
回复

能不能给我解释一下float i=0.456; 0(符号) 01111101(指数) 11010010111100011010101(尾数)

怎么理解啊,要是指数部分减去127的话,125-127=-2了啊?
tailzhou 2008-11-09
  • 打赏
  • 举报
回复
1)指数部分的8位值还要减127才是实际的指数;
2)尾数部分是去掉整数1后的小数部分;

0 10000000 00111010010111100011011
== 1.00111010010111100011011B * 2^ (10000000B-01111111B)
==10.0111010010111100011011B
==2.2.456

lz自己google一下就可以找到答案了;
ccccj 2008-11-09
  • 打赏
  • 举报
回复
高手们,或者说一下怎么样把float i=0.456; 到表示成0(符号) 01111101(指数) 11010010111100011010101(尾数) 转换过程也行!谢谢了
ccccj 2008-11-09
  • 打赏
  • 举报
回复
非常感谢你,我稍微明白点了,
但是要是我假如想把:10.0111010010111100011011B 这个二进制小数,还原为十进制小数,应该怎么样理解啊,我GOOGLE找了一下,不是很明白!10应该还原为2,对吧,可是后面的小数位0.0111010010111100011011B,这些该怎样理解呢到十进制小数呢,麻烦你说一下,真的想明白他

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧