为了账号安全,请及时绑定邮箱和手机立即绑定

如何用C表示内存中的FLOAT编号

如何用C表示内存中的FLOAT编号

C
POPMUISE 2019-08-01 17:40:25
如何用C表示内存中的FLOAT编号在阅读教程时,我遇到了如何在内存中表示浮点数。本教程有一个带浮点数的例子。   float a=5.2  with below Diagram任何人都可以告诉我5.2如何转换为二进制文件以及它如何在上图中的内存中表示?
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

我认为图表不是一个正确的百分比。


浮点数存储在内存中,如下所示:


它们被分解为:


符号s(表示它是正还是负) - 1位

尾数m(基本上是你的数字的数字 - 24位

指数e- 7位

然后,您可以将任何数字写x为s * m * 2^ewhere ^表示取幂。


5.2应表示如下:


0 10000001 01001100110011001100110    

S    E               M

S=0 表示它是正数,即 s=+1


E将被解释为无符号数,从而表示129。请注意,您必须从中减去127 E以获得原始指数e = E - 127 = 2


M必须按以下方式解释:它被解释为以a开头,1后跟一个point(.),然后是该点之后的数字。后面的数字.是实际编码的数字m。我们为每个数字引入权重:


bits in M: 0   1    0     0      1       ... 

weight:    0.5 0.25 0.125 0.0625 0.03125 ... (take the half of the previous in each step)

现在总结相应位设置的权重。完成此操作后,添加1(由于IEEE标准中的规范化,您总是为解释添加1  M)并获取原始数据m。


现在,您计算x = s * m * 2^e并获取原始数字。


因此,唯一剩下的就是在实际内存中,字节可能是相反的顺序。这就是为什么数字可能不会存储如下:


0 10000001 01001100110011001100110    

S    E               M

但更多的是相反(简单地采取8位块并镜像他们的顺序)


01100110 01100110 10100110 01000000

MMMMMMMM MMMMMMMM EMMMMMMM SEEEEEEE


查看完整回答
反对 回复 2019-08-01
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

该值以相反的顺序表示在存储器中,但由于浮点值的准确性损失,混淆点可能是5.2f实际上表示为5.1999998。


查看完整回答
反对 回复 2019-08-01
  • 3 回答
  • 0 关注
  • 451 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信