1

所以我有两个基于 IEEE 浮点格式的 9 位浮点表示。

格式 A:1 个符号位,k=5 个指数位,n = 3 个小数位,偏置为 15

格式 B:1 个符号位,k=4 个指数位,n = 4 个小数位,偏置为 7

我想将格式 A 转换为格式 B 并使用四舍五入到 +无穷大。他们给出的示例问题是:

格式 A

位:1 01111 001

值:-9/8

格式 B

位:1 0111 0010

值:-9/8

我完全理解如何将二进制转换为十进制形式,但我完全不知道他们如何将 1 01111 001 转换为 1 0111 0010。

任何帮助都会很棒。谢谢!

4

1 回答 1

1

指数位是切换时的主要焦点,因为您需要使用每种格式的不同偏差进行转换。所以看看你给出的例子:

FORMAT A 的偏差为 15,指数二进制值为 15 (01111),因此您采用二进制值 - 就像您试图获得 IEEE 值一样;因此,给你零。在计算 IEEE 值时,您的等式如下所示:

2^0 * 1.001。1.001 是小数位值的 1 倍。

现在我们转换为 FORMAT B。

格式 B 有 4 个指数位。因此,我们采用您的等式的指数 0 并使用 B 偏差来找到您的位串需要是什么。

位串值 - 偏差 = 等式中的指数。这就像在查找位串的 IEEE 值时查找指数一样。

位串值 = 0 + 偏差 = 0 + 7,因为 B 偏差为 7。

因此我们需要的位串值是 7:0111

结合我们目前得到的结果:0(符号位)、0111(指数位)、001(小数位)== 0 0111 001。

现在我们必须为 FORMAT B 获取长度为 4 的小数位串。我们有 001 并且需要在最后一位数字处添加一些位,因此我们有 001_ 形式的内容,其中 _ 表示添加的新位。由于您希望保持精度尽可能接近原始格式,因此您将其设为 0。永远不要将其设为 1,因为这会将您的小数位串更改为 2 倍,从而失去精度。

现在我们将它们组合在一起得到: 0 0111 0010 这是示例的最终答案。

因此,在不同格式之间进行转换时,您需要记住两个简单的准则:

  1. 如果您要添加位:3 --> 4 个小数位,则在末尾添加零以使位串具有您需要的长度。

  2. 如果您正在“删除”位:4 --> 3 个小数位,则最右边(最低有效)位将丢失。因此 0111 --> 011(1) 其中 (1) 是“已删除的位”。

于 2018-10-04T15:18:55.853 回答