【问题标题】: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 位格式,您将不得不移动一些位来分隔字段,而不是仅仅从视觉上提取十六进制数字。