关于float在内存中的存储方式

qjzrd 2008-02-15 12:20:52
最近在网上看到一片float存储 有点疑问:

8.25用二进制表示可表示为1000.01, 科学计数法表示1000.01可以表示为1.00001*2的3次方

这样8.25在内存的存储就为 0 1000 0010 000 0100 0000 0000 0000 0000

根据这个结论

2.25的单精度存储方式应该是: 0 1000 0000 001 0000 0000 0000 0000 0000


而看到别人的是 "2.25的单精度存储方式,很简单 0 1000 0001 001 0000 0000 0000 0000 0000"

想知道 到底是谁的对, 如果是我错了 那错在哪里呢 谢谢大家
...全文
1038 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
baihacker 2008-02-15
  • 打赏
  • 举报
回复
2.25 : 10.01
右移1位
1.001
减去1
0.001
故:尾数:001 ....000
前面右移一位,故阶码为 127 + 1 = 128

void ShowFloat32(float f)
{
unsigned int d = *(int*)&f;
cout << "符号:" << int((d&0x80000000)>>31) << '\t';
cout << "阶码:" << int((d&0x7f800000)>>23) << '\t';
cout << "尾数:" << int(d&0x007fffff) << endl;
for (unsigned int i = 31; i > 0; i--)
{
cout << int((d&(1<<i))>>i);
if (i == 31 || i == 23) cout << ' ';
}
cout << endl;
}
iambic 2008-02-15
  • 打赏
  • 举报
回复
google: IEEEE floating point

70,024

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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