【问题标题】:64 Bit Hex conversion to decimal64位十六进制转换为十进制
【发布时间】:2018-09-27 14:50:53
【问题描述】:

我有一个 16 位的十六进制值:

4164ACFCE33404EA

转换后的数字是:

10840039.1001

我尝试了 IEEE 单精度和双精度 64 位到十进制以及各种 16 位双补码转换,但没有成功。有任何想法吗?

【问题讨论】:

标签: floating-point type-conversion hex data-conversion


【解决方案1】:

您问题中的十六进制值显示了用于表示 IEEE-754 基本 64 位二进制格式中的浮点数的位。

第一位,0,是符号。 0 表示正数。

接下来的 11 位 41616 对指数进行编码。 41616 是 104610。代码偏置了1023,也就是说它所代表的2的实际幂是21046−1023 = 223

剩余的 52 位编码数字的有效数字(小数)部分。这些位是 4ACFCE33404EA16。为了从这段代码中获得实际有效位,我们将它们写为“1”。后跟代码:1.4ACFCE33404EA16。在十进制中,这是 1.29223335982561104984256417083088308572769165039062510

当我们将有效位乘以 223 时,结果是 10840039.1000999994575977325439453125。也就是 4164ACFCE33404EA16 位表示的值。

注意事项

“1”的用法。有效数字用于正常数字,其中编码的指数不是 0 或其最大值。如果指数代码为零,则该数字为零或次正规,以及“0”。与有效数字一起使用。如果指数代码是其最大值(64 位格式为 2047),则浮点对象表示无穷大(如果所有有效位都为零)或 NaN。

在 64 位格式中,十六进制数字恰好与指数字段和有效数字字段之间的边界对齐。在其他格式中,例如 32 位格式,您将不得不移动一些位来分隔字段,而不是仅仅从视觉上提取十六进制数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-08
    • 2018-09-04
    • 1970-01-01
    • 2011-07-28
    • 2014-12-31
    • 1970-01-01
    相关资源
    最近更新 更多