使用IEEE 754将浮点转为二进制。

问题描述 投票:0回答:2

你好,我需要用IEEE格式存储0.2730。现在我所做的是将sing设置为0,因为这个数字是正数。现在,我想,因为什么是在点之前是0,那么我不需要做任何转换,因为0在二进制中,它只是0,所以指数将最终是0,我只需要将127转换为二进制。当我寻找Mantissa时,我试着做模式,当我把十进制部分乘以2,并取出之前的数字,我找不到模式,也没有达到0,所以我做的只是乘法,直到我发现23位。现在当我查到实际值时,它说指数应该是125,而这个数字实际上是0 0111 0001 0111 1000 1101 0101 000。现在我不知道为什么要从指数中减去2,因为我觉得在做乘2模式的时候,我不用动点,也不用什么时候停止。我留了一张我的作品图片,以防对你有帮助。先谢谢你,希望你做得很好

enter image description here

binary floating-point ieee-754 single-precision
2个回答
1
投票

IEEE-754二进制32编码

0.2730的符号是正数,所以IEEE-754 binary32格式的符号位将为0。

接下来,用2的幂来表示这个数字:0.2730 = 0.2730 - 2。0. 其中,我们把"-"(0.2730)之前的部分称为"-"。意义,而2升到的幂是。指数.

允许的调整方法是以1为增量调整指数,并将指数乘以或除以2。0.2730 • 20 = 0.5460 • 2−1 = = 1.0920 • 2−2.

这就是所谓的归一化形式。这种形式中的指数,-2是用来编码的。为了用指数位进行编码,我们加上格式的固定偏置,127,并将结果写成8位二进制。-2+127=125,二进制的125就是01111101。

接下来,将二进制中的意义位写成至少24位。1.0920 = 1.0001011110001101010011111101111100111011…2. 粗体显示的是前24位数字。在IEEE-754二进制32格式中,我们只能使用24位数字,而我们看到剩余的部分在24位的一半之上 位数,所以我们将四舍五入,产生1.00010111100011010101000。2. 这就是我们的二进制意义。(具体操作方法请看下面的 "十进制转二进制")。

为了对意义进行编码,我们使用". "后面的23位数字(前导数是已知的,因为我们将数字规范化,所以它不需要包含在编码意义的位中)。这些位是00010111100011010101000。

然后我们把符号、指数和意义位放在一起。0 01111101 00010111100011010101000.

十进制到二进制

将十进制数字1.0920转换为二进制。

  • 写下前导的 "1 "并去掉它,得到0. 0920. 乘以二,得到0.1840。同时写上".",因为我们从这一点开始。
  • 写下前导的 "0 "并去掉它,得到0.1840。乘以二,得到0.3680。
  • 写出前导的 "0 "并去掉它,得到0.3680。乘以2,得到0.7360。
  • 写出前面的 "0 "并去掉它,得到0.7360。乘以2,得到1.4720。
  • 写出前面的 "1 "并去掉它,得到0.4720。乘以2,得到0.9440。

根据需要继续进行。


0
投票

很难看出你图片中的内容,但这是你的数字的二进制布局。0.2730 作为单精度和双精度的IEEE-754表示。希望你可以用它来仔细检查你的答案。如果你有一个不匹配的问题,请随时提出一个更具体的问题。

这里是 0.2730 以单精度(32位)IEEE-754表示。

                  3  2          1         0
                  1 09876543 21098765432109876543210
                  S ---E8--- ----------F23----------
          Binary: 0 01111101 00010111100011010101000
             Hex: 3E8B C6A8
       Precision: SP
            Sign: Positive
        Exponent: -2 (Stored: 125, Bias: 127)
       Hex-float: +0x1.178d5p-2
           Value: +0.273 (NORMAL)

这里也是一样,这次是双精度(64位)IEEE754表示法。

                  6    5          4         3         2         1         0
                  3 21098765432 1098765432109876543210987654321098765432109876543210
                  S ----E11---- ------------------------F52-------------------------
          Binary: 0 01111111101 0001011110001101010011111101111100111011011001000110
             Hex: 3FD1 78D4 FDF3 B646
       Precision: DP
            Sign: Positive
        Exponent: -2 (Stored: 1021, Bias: 1023)
       Hex-float: +0x1.178d4fdf3b646p-2
           Value: +0.273 (NORMAL)
© www.soinside.com 2019 - 2024. All rights reserved.