64位十六进制转换为十进制

时间:2018-09-27 14:50:53

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

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

  

4164ACFCE33404EA

转换后,数字为:

  

10840039.1001

我已经尝试过将IEEE单精度和双精度64位转换为十进制,并且尝试了多种16位的2转换,但是都没有运气。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

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

第一位0是符号。 0表示肯定。

接下来的11位416 16 对指数进行编码。 416 16 是1046 10 。该代码有1023的偏差,表示它代表的实际2的幂是2 1046-1023 = 2 23

其余52位编码数字的有效(分数)部分。这些位是4ACFCE33404EA 16 。为了从该代码中获取实际的有效位数,我们将其写为“ 1”,后跟代码:1.4ACFCE33404EA 16 。以十进制表示的是1.292233359825611049842564170830883085727691650390625 10

当我们将有效数乘以2 23 时,结果为10840039.1000999994575977325439453125。那是由4164ACFCE33404EA 16 位表示的值。

注释

有效数字使用“ 1.”表示正常数字,其中编码指数不为0或其最大值。如果指数代码为零,则数字为零或次正规数,并使用“ 0.”代替有效数字。如果指数代码是最大值(对于64位格式为2047),则浮点对象将表示无穷大(如果所有有效位数均为零)或NaN。

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