首页 > 解决方案 > 32 位 IEEE 754 单精度浮点到十六进制

问题描述

我已经学会了如何将数字转换为浮点(在二进制、八进制和十六进制之上),并且知道如何将数字转换为浮点。

但是,在查看给我的工作表时,我遇到了以下问题:

使用 32 位 IEEE 754 单精度浮点数以十六进制显示 -12.13 的表示。

我已经尝试查看我拥有的资源,但仍然无法弄清楚如何回答上述问题。给出的答案是0xc142147b

编辑:很抱歉没有澄清,但我想知道如何手工完成而不是编码。

标签: floating-pointhexieee-754

解决方案


-12.13必须先转换为二进制,然后再转换为十六进制。让我们或多或少地像glibc库那样做,只使用笔和纸和 Windows 计算器。

删除标志,但请记住我们有一个:12.13

有效数字(或尾数)

整数部分,12很简单:(C十六进制)

小数部分,0.13有点棘手。0.1313/100。我使用 Windows 计算器(程序员模式,十六进制)并将13(十六进制D)向左移动 32(*)位:D00000000. 将其除以100(hex 64) 得到:2147AE14hex。

由于我们需要一个低于 1 的值,我们再次右移 32 位,得到:0.2147AE14

现在在左边添加整数部分:C.2147AE14

我们只需要 24 位的尾数,所以我们四舍五入:C.2147B-->C2147B

现在必须对其进行归一化,因此二进制点向左移动 3 位(当然,这些位保持不变)。指数(最初为 0)相应地增加了 3,所以现在它是 3。

现在可以删除隐藏位:(42147B现在是 23 个低位)

现在可以将其转换为 32 位值:0x0042147B

指数和符号

现在让我们采用指数: + hex = hex或二进制3的偏差。7F821000 0010

在左侧添加符号位:1 1000 0010. 重新组合:1100 0001 0C10

当然这些是最高位,所以我们把它变成0xC1000000完整的 32 位

“按位或”两个部分

0xC100000 | 0x0042147B = 0xC142147B

这就是你想要的价值。


(*) 32 位,所以我有足够多的位可以在以后正确舍入。


推荐阅读