首页 > 解决方案 > 使用 IEEE 754 浮点到二进制

问题描述

您好,我需要使用 IEEE 格式存储 0.2730。现在我所做的是将 sing 设置为 0,因为数字是正数。现在我想,既然点之前是 0,那么我不必对它进行任何转换,因为二进制中的 0 它只是 0,所以指数最终会是 0,我只需要将 127 转换为二进制。当我寻找尾数时,我试图做模式,当我将小数部分乘以 2 并在我找不到模式也没有达到 0 之前取出数字所以我所做的只是乘以直到找到 23 位. 现在,当我查看实际值时,它说指数应该是 125,而这个数字实际上是 0 0111 0001 0111 1000 1101 0101 000。现在我不知道为什么我必须从指数中减去 2,因为我认为在进行乘以 2 模式时我不必移动点或何时停止。我留下了我工作的照片以防万一。在此先感谢您,希望您一切顺利

在此处输入图像描述

标签: binaryfloating-pointieee-754single-precision

解决方案


IEEE-754 binary32 编码

0.2730 的符号为正,因此 IEEE-754 binary32 格式的符号位将为零。

接下来,用 2 的幂表示具有显式缩放的数字: 0.2730 = 0.2730 • 2 0。在此,我们将“•” (0.2730) 之前的部分称为有效数字,而 2 的幂是指数

然后,调整此表示以使有效数字至少为 1 且小于 2。允许的调整是将指数调整为增量 1,并相应地将有效数字乘以或除以 2:0.2730 • 2 0 = 0.5460 • 2 -1 = = 1.0920 • 2 -2

这称为规范化形式。这种形式的指数 -2 用于编码。为了在指数位中对其进行编码,我们添加了格式的固定偏差 127,并将结果写入 8 位二进制。−2 + 127 = 125,二进制的 125 是 01111101。

接下来,将二进制有效数字写入至少 24 位:1.0920 = 1.00010111100011010100111 11101111100111011...<sub>2。粗体显示前 24 位数字。我们只能使用 IEEE-754 binary32 格式的 24 位数字,并且我们看到剩余部分在第 24 位数字的一半以上因此我们将四舍五入,产生 1.00010111100011010101000 2。那是我们二进制的有效数字。(有关执行此操作的信息,请参阅下面的“十进制到二进制”。)

为了对有效数字进行编码,我们使用“.”后面的 23 位数字。(已知前导数字为 1,因为我们将数字归一化以使其如此,因此它不需要包含在主要对有效数字进行编码的位中。)这些位是 00010111100011010101000。

然后我们将符号、指数和有效位放在一起:0 01111101 00010111100011010101000。

十进制转二进制

要将十进制数字 1.0920 转换为二进制:

  • 写下开头的“1”并将其删除,得到 0.0920。乘以 2,得到 0.1840。还要写“。” 因为我们从这一点开始。
  • 写入前导“0”并将其删除,得到 0.1840。乘以 2,得到 0.3680。
  • 写入前导“0”并将其删除,得到 0.3680。乘以 2,得到 0.7360。
  • 写入前导“0”并将其删除,得到 0.7360。乘以 2,得到 1.4720。
  • 写下前导“1”并将其删除,得到 0.4720。乘以 2,得到 0.9440。

根据需要继续。


推荐阅读