如何使用IEEE标准将十六进制转换为二进制表示中的浮点数

How to transform hexadecimal to float in binary representation with IEEE standards

提问人:Tony Cheng 提问时间:3/5/2023 更新时间:3/8/2023 访问量:112

问:

示例:十六进制数为 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。我错在哪里?

浮点 二进制

评论


答:

1赞 Eric Postpischil 3/5/2023 #1

指数是以下 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。

0赞 alias 3/8/2023 #2

埃里克已经解释了细节,但这里是表格形式,你可能会觉得有帮助:

  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