c - 如何在 C 中表示内存中的 FLOAT 数

标签 c floating-point

在阅读教程时,我遇到了如何在内存中表示 float 。该教程有一个带有 float 的示例。

   float a=5.2  with below Diagram

enter image description here

谁能告诉我这个 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/

相关文章:

c - c中的指针表达式有什么问题?

带小数点的数字中的 Perl 奇怪行为

swift - 如何在 Swift 中减去 Double.pi 和 Float.pi?

c - 更新 c 中的局部 vector 条目

c - putchar 如何与 while 循环一起使用?

c - 体系结构 x86_64 的 undefined symbol 。如何正确包含?

c - 如何处理 argv 字符数组赋值?

C++ 可移植浮点位表示?

float() 的 Python 无效文字

c++我可以用double初始化一个float类型的变量吗?