您好,我需要使用 IEEE 格式存储 0.2730。现在我所做的是将 sing 设置为 0,因为数字是正数。现在我想,既然点之前是 0,那么我不必对它进行任何转换,因为二进制中的 0 它只是 0,所以指数最终会是 0,我只需要将 127 转换为二进制。当我寻找尾数时,我试图做模式,当我将小数部分乘以 2 并在我找不到模式也没有达到 0 之前取出数字所以我所做的只是乘以直到找到 23 位. 现在,当我查看实际值时,它说指数应该是 125,而这个数字实际上是 0 0111 0001 0111 1000 1101 0101 000。现在我不知道为什么我必须从指数中减去 2,因为我认为在进行乘以 2 模式时我不必移动点或何时停止。我留下了我工作的照片以防万一。在此先感谢您,希望您一切顺利
2 回答
IEEE-754 binary32 编码
0.2730 的符号为正,因此 IEEE-754 binary32 格式的符号位将为零。
接下来,用 2 的幂表示具有显式缩放的数字: 0.2730 = 0.2730 • 2 0。在此,我们将“•” (0.2730) 之前的部分称为有效数字,而 2 的幂是指数。
然后,调整此表示以使有效数字至少为 1 且小于 2。允许的调整是将指数调整为增量 1,并相应地将有效数字乘以或除以 2:0.2730 • 2 0 = 0.5460 • 2 -1 = = 1.0920 • 2 -2。
这称为规范化形式。这种形式的指数 -2 用于编码。为了在指数位中对其进行编码,我们添加了格式的固定偏差 127,并将结果写入 8 位二进制。−2 + 127 = 125,二进制的 125 是 01111101。
接下来,将二进制有效数字写入至少 24 位:1.0920 = 1.00010111100011010100111 11101111100111011...<sub>2。粗体显示前 24 位数字。我们只能使用 IEEE-754 binary32 格式的 24 位数字,并且我们看到剩余部分在第 24 位数字的一半以上,因此我们将四舍五入,产生 1.00010111100011010101000 2。那是我们二进制的有效数字。(有关执行此操作的信息,请参阅下面的“十进制到二进制”。)
为了对有效数字进行编码,我们使用“.”后面的 23 位数字。(已知前导数字为 1,因为我们将数字归一化以使其如此,因此它不需要包含在主要对有效数字进行编码的位中。)这些位是 00010111100011010101000。
然后我们将符号、指数和有效位放在一起:0 01111101 00010111100011010101000。
十进制转二进制
要将十进制数字 1.0920 转换为二进制:
- 写下开头的“1”并将其删除,得到 0.0920。乘以 2,得到 0.1840。还要写“。” 因为我们从这一点开始。
- 写入前导“0”并将其删除,得到 0.1840。乘以 2,得到 0.3680。
- 写入前导“0”并将其删除,得到 0.3680。乘以 2,得到 0.7360。
- 写入前导“0”并将其删除,得到 0.7360。乘以 2,得到 1.4720。
- 写下前导“1”并将其删除,得到 0.4720。乘以 2,得到 0.9440。
根据需要继续。
很难看到您的图片中的内容,但这里是您的数字的二进制布局,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)