所以我有两个基于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。
任何帮助都会很棒。谢谢!
答案 0 :(得分:1)
切换时,指数位是主要焦点,因为您需要使用每种格式的不同偏置进行转换。因此,请看示例:
FORMAT A的偏差为15,指数二进制值为15(01111),因此采用二进制值-偏差类似于尝试获得IEEE值时的偏差;因此,给你零。在计算IEEE值时,您的公式如下所示:
2 ^ 0 * 1.001。 1.001是小数位值的1倍。
现在,我们转换为格式B。
FORMAT B具有4个指数位。因此,我们采用等式的指数为0,并使用B偏差来查找您的位串需要是什么。
位字符串值-bias =公式中的指数。就像在找到位串的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,这是示例的最终答案。
因此,在不同格式之间进行转换时,您需要记住两个简单的准则:
如果要添加位:3-> 4个小数位,则末尾添加零以使位字符串达到所需的长度。
如果要“删除”位:4-> 3个小数位,则最右边(最低有效)位将丢失。因此0111-> 011(1),其中(1)是“已删除的位”。