作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在阅读教程时,我遇到了如何在内存中表示 float 。本教程有一个带有 float 的示例。
float a=5.2 with below Diagram
谁能告诉我这个 5.2 是如何转换成二进制的,以及它是如何在上图中的内存中表示的?
最佳答案
如前所述,5.2 表示为符号位、指数和尾数。 5.2如何编码?
5 很简单:
101.
其余的,0.2 是 1/5,因此将 1.00000...
(十六进制)除以 5,得到 0.3333333...
(十六进制)。
(如果你考虑少一点的话,这可以更容易地遵循:0.FFFF...
→ F/5 = 3
,所以它是很容易看出 0.FFFF.../5 = 0.33333...
。除以 5 时,缺少的一位并不重要,因此 1.0000.../5 = 0.3333 ...
也是)。
这应该给你
0.0011001100110011001100110011...
加5,就得到
101.00110011001100110011... exp 0 (== 5.2 * 2^0)
现在将其右移(对其进行标准化,即确保最高位位于小数点之前)并相应地调整指数:
1.010011001100110011001100110011... exp +2 (== 1.3 * 2^2 == 5.2)
现在您只需将 127 的偏差(即 129 = 0b10000001
)添加到指数并存储它:
0 10000001 1010 0110 0110 0110 0110 0110
忘记尾数的前 1 位(除了一些特殊值之外,它始终应该为 1,因此不会存储),您将得到:
01000000 10100110 01100110 01100110
现在您只需决定小端或大端。
这并不完全是它的工作原理,但是当像 5.2 这样的数字转换为二进制时,或多或少会发生这种情况。
关于c - 如何在C中表示内存中的FLOAT数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29663941/
我是一名优秀的程序员,十分优秀!