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

Binary 使用IEEE 754将浮点转换为二进制,binary,floating-point,ieee-754,single-precision,Binary,Floating Point,Ieee 754,Single Precision,你好,我需要使用IEEE格式存储0.2730。现在我所做的是将sing设置为0,因为这个数字是正数。现在我想既然点之前的是0,那么我就不必对它做任何转换,因为二进制中的0就是0,所以指数最终是0,我只需要将127转换成二进制。当我寻找尾数的时候,我试着做了一个模式,当我把小数部分乘以2,然后在我找不到模式或者它达到0之前取出数字,所以我做的只是乘法,直到找到23位。现在,当我查实际值时,它说指数应该是125,这个数字实际上是0 0111 0001 0111 1000 1101 0101 000。

你好,我需要使用IEEE格式存储0.2730。现在我所做的是将sing设置为0,因为这个数字是正数。现在我想既然点之前的是0,那么我就不必对它做任何转换,因为二进制中的0就是0,所以指数最终是0,我只需要将127转换成二进制。当我寻找尾数的时候,我试着做了一个模式,当我把小数部分乘以2,然后在我找不到模式或者它达到0之前取出数字,所以我做的只是乘法,直到找到23位。现在,当我查实际值时,它说指数应该是125,这个数字实际上是0 0111 0001 0111 1000 1101 0101 000。现在我不知道为什么我必须从指数中减去2,因为我认为我不必移动点,也不必在进行2乘模式时停止。我留了一张我工作的照片以防万一。提前谢谢,希望你一切顺利


很难看到您的图片中有什么内容,但这是您的数字
0.2730
的二进制布局,作为单精度和双精度IEEE-754表示。希望你能用它来再次检查你的答案。如果您有不匹配的地方,请随意提出更具体的问题

以下是单精度(32位)IEEE-754表示法中的
0.2730

                  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)
                  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)
这是同样的,这次是双精度(64位)IEEE754表示:

                  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)
                  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)
IEEE-754二进制32编码 0.2730的符号为正,因此IEEE-754 binary32格式的符号位为零

接下来,以2:0.2730=0.2730•20的幂的显式比例表示数字。在这里,我们称“•”(0.2730)之前的部分为有效位,2的幂次方为指数

然后,调整此表示,使有效位至少为1且小于2。允许的调整是以1的增量调整指数,并相应地将有效位乘以或除以2:0.2730•20=0.5460•2−1 = = 1.0920 • 2−二,


这称为规范化形式。这种形式的指数,−2用于编码。为了将其编码为指数位,我们添加了格式127的固定偏差,并将结果写入8位二进制。−2+127=125,二进制中的125是011111101


接下来,将二进制有效位写入至少24位:1.0920=1.0001011110001010100111111111111100111011…2。粗体显示前24位数字。在IEEE-754 binary32格式中,我们只能使用24位数字,并且我们看到剩余部分在24位数字的一半以上,因此我们将四舍五入,生成1.000101111000101010100002。这是二进制的有效位。(有关执行此操作的信息,请参阅下面的“十进制到二进制”。)

为了对有效位进行编码,我们使用“.”后面的23位数字(已知前导位为1,因为我们对数字进行了规范化处理,所以它不需要包含在主要对有效位进行编码的位中。)这些位是0001011110001010101000

然后我们将符号、指数和有效位放在一起:0 011111101 0000111110001010101000

十进制到二进制 要将十进制数字1.0920转换为二进制:

  • 写出前导的“1”并将其删除,给出.0920。乘以2,得到0.1840。同时写上“.”,因为我们从这一点开始
  • 写出前导的“0”并将其删除,给出.1840。乘以2,得到0.3680
  • 写下前导“0”并将其删除,给出.3680。乘以2,得到0.7360
  • 写下前导“0”并将其删除,给出.7360。乘以2,得到1.4720
  • 写出前导的“1”并将其删除,给出.4720。乘以2,得到0.9440

根据需要继续。

语言:“将0.2730存储为IEEE”是有意义的,因为0.2730是一个值,IEEE是一种格式。“转换”没有意义,除非您的意思是“0.2730”是以不同格式存储的值,例如base10字符串,并且您正在从一种格式转换到另一种格式。“浮点到二进制”没有意义,因为浮点是二进制格式。仅仅因为第一个数字是零并不意味着指数是零。您需要重新阅读如何确定指数。你也忘记了“隐含1”。根据我的理解,当你以IEEE 754格式存储它时,你将数字分成整数部分和小数部分。将每个部分转换为二进制,然后将整个部分与小数点分隔的小数部分合并。然后移动小数点,直到达到科学符号结构1.XXXX(x只是数字的占位符),所以我认为,因为我的整个部分已经是二进制的,我只是一个数字,所以我不需要移动小数点。那是什么意思?你说的浮点是二进制数是什么意思?“因为我的整个部分都是二进制的,我只有一个数字,所以我不需要移动这个点。”你把整个部分转换成“01000…”,这显然不是科学符号结构1.XXXX,因为它以零开始。所以你需要移动点。此外,浮点格式有一个隐式1,以节省存储空间。你应该重读那一节。最后,您已经注意到IEEEE格式由0和1组成。。。。这使它成为一种二进制格式。这是一种不同于我们用于整数的两种互补格式的二进制格式,但它们都是二进制格式。@MooingDuck:“Convert”0.2730到IEEE-754二进制32是有意义的。转换是从一种表示事物的方式转变为另一种表示事物的方式。“0.2730”是表示数字的十进制方式。IEEE-754 binary32是另一种方式,−2是用来编码的。“值得一提的是,这就是为什么他的指数在白纸上的值为2