提问人:Tony Cheng 提问时间:3/5/2023 更新时间:3/8/2023 访问量:112
如何使用IEEE标准将十六进制转换为二进制表示中的浮点数
How to transform hexadecimal to float in binary representation with IEEE standards
问:
示例:十六进制数为 45100000H,其浮点数在 IEEE 标准中的表示是什么。
我的计算过程是:
45100000H = 0100 0101 0001 0000 0000 0000 0000
由于第一个 0,我们得到了一个正数
指数是以下 8 个数字:1000、1010。
由于它是偏移二进制,如果我们反转第一个数字,我们得到反向代码 0000 1010。
指数的值为 2^1 + 2^3 = 10
所以我的结论是 45100000H = +1.125*2^10
但答案是+1.125*2^11。我错在哪里?
答:
指数是以下 8 个数字:1000、1010。
差一点。指数的代码是八位 1000 1010。这不是指数;这是一个告诉我们指数是多少的数字。
为了解码这些位,首先我们用二进制解释它们,然后我们减去偏差 127。在二进制中,它们将是 128 + 8 + 2 = 138。减去 127 得到 11。所以指数是 11。
由于它是偏移二进制,如果我们反转第一个数字,我们得到反向代码 0000 1010。
不,这不是指数代码的解码方式。
完成整数的解码,主有效位为 001 0000 0000 0000 0000。当指数码不全是零位或全是位时,我们通过将“1.”放在主有效位的前面并将它们解释为二进制来解码有效位。因此,我们形成“1.001 0000 0000 0000 0000“并将它们解释为二进制(忽略空格),这给出了 11/8。
因此,位 0100 0101 0001 0000 0000 0000 0000 表示 + 2 11 •11/8 = 2304。
埃里克已经解释了细节,但这里是表格形式,你可能会觉得有帮助:
DECODED = 2304.0 :: Float
3 2 1 0
1 09876543 21098765432109876543210
S ---E8--- ----------S23----------
Binary layout: 0 10001010 00100000000000000000000
Hex layout: 4510 0000
Precision: Single
Sign: Positive
Exponent: 11 (Stored: 138, Bias: 127)
Classification: FP_NORMAL
Binary: 0b1.001p+11
Octal: 0o4.4p+9
Decimal: 2304.0
Hex: 0x9p+8
评论