将整数转换为IEEE浮点数?

时间:2020-04-06 18:23:41

标签: c floating-point

我目前正在阅读“计算机系统:程序员的观点”。在本书中,使用big-endian(最高有效位在前)。在使用32位单精度的IEEE浮点数的情况下,以下是整数和IEEE浮点之间的转换的引用:

一个有用的练习,用于理解浮点表示 是将样本整数值转换为浮点形式。对于 例子,我们在图中看到 2.15 12,345具有二进制表示形式[11000000111001]。通过将13个位置移动到 二进制点的右边,得到12,345 = 1.10000001110012×2 ^ 13。至 以IEEE单精度格式对此进行编码,我们构建分数 通过删除前导1并在末尾添加10个零来获得字段 二进制表示形式[10000001110010000000000]。构造 指数字段,我们将偏差127加到13,得到140,它具有二进制 表示[10001100]。我们将其与符号位0结合起来得到 二进制的浮点表示形式 [010001100100000010001110010000000000]。

我不理解的是“通过删除前导1并在末尾添加10个零, 二进制表示形式[10000001110010000000000]。”如果使用big-endian,为什么要在1000000111001的末尾添加10个零?这不会导致另一个值而不是二进制点之后的值吗?由于最终的十进制值仍将是原来在二进制点之后的十进制值,所以前面的10个零。

如果使用big-endian,为什么/如何在后面添加10个零而不更改值?

1 个答案:

答案 0 :(得分:0)

这是将数字12345表示为32位单精度IEEE754浮点数的方式:

                  3  2          1         0
                  1 09876543 21098765432109876543210
                  S ---E8--- ----------F23----------
          Binary: 0 10001100 10000001110010000000000
             Hex: 4640 E400
       Precision: SP
            Sign: Positive
        Exponent: 13 (Stored: 140, Bias: 127)
       Hex-float: +0x1.81c8p13
           Value: +12345.0 (NORMAL)

由于这是一个NORMAL值,因此小数部分将使用隐式1位进行解释;就是1.10000001110010000000000。因此,要填充23位的尾数,只需在末尾添加10 0,因为它不会更改值。

字节序实际上与这些数字的表示方式无关,因为每一位都有固定的含义。但通常,最高有效位在指数和尾数的左侧。

相关问题