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

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

在阅读教程时,我遇到了如何在内存中表示浮点数。本教程有一个带浮点数的例子。

   float a=5.2  with below Diagram

任何人都可以告诉我5.2如何转换为二进制文件以及它如何在上图中的内存中表示?


POPMUISE
浏览 452回答 3
3回答

饮歌长啸

我认为图表不是一个正确的百分比。浮点数存储在内存中,如下所示:它们被分解为:符号s(表示它是正还是负) - 1位尾数m(基本上是你的数字的数字 - 24位指数e- 7位然后,您可以将任何数字写x为s * m * 2^ewhere ^表示取幂。5.2应表示如下:0 10000001 01001100110011001100110    S    E               MS=0 表示它是正数,即 s=+1E将被解释为无符号数,从而表示129。请注意,您必须从中减去127 E以获得原始指数e = E - 127 = 2M必须按以下方式解释:它被解释为以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 01000000MMMMMMMM MMMMMMMM EMMMMMMM SEEEEEEE

拉莫斯之舞

该值以相反的顺序表示在存储器中,但由于浮点值的准确性损失,混淆点可能是5.2f实际上表示为5.1999998。
打开App,查看更多内容
随时随地看视频慕课网APP