在阅读教程时,我遇到了如何在内存中表示 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/6910115/