我有一个16位十六进制值:
4164ACFCE33404EA
转换后,数字为:
10840039.1001
我已经尝试过将IEEE单精度和双精度64位转换为十进制,并且尝试了多种16位的2转换,但是都没有运气。有任何想法吗?
答案 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位格式)中,您将不得不移位一些位以分隔字段,而不是仅视觉上提取十六进制数字。