0

我正在学习浮点加法,但我很困惑。我正在使用的示例是这样的:

(假设 8 位机器,指数超 3)

x = 6.75 = 01011011
y = -10 = 11100100

非规范化并使用相同的指数给出:

x = 1.1011 x 2^2 = 0.1101 x 2^3
y = -1.0100 x 2^3

加/减尾数给出:

01101 + -10100 = -00111

我不太明白 01101 + -10100 = -00111。有人可以向我解释一下吗?

4

3 回答 3

5

首先,缩放 1.1011•2 2应该给出 0.11011•2 3,而不是 0.1101•2 3。提前丢弃比特是错误的。

然而,考虑到它的方式,我们想要计算 01101 + -10100。将较大的数字放在较小的数字之上,并记住,因为较大的数字是负数,所以结果必须是负数:

1 0 1 0 0
0 1 1 0 1
_________

现在减去小学的方式。在右边,我们从 0 中减去 1。这需要从左边的数字借位,所以我们从 10 中减去 1(0 加上借来的值)并标记借位:

1 0 1 0'0
0 1 1 0 1
_________
        1

现在我们从 -1 中减去 0(0 减去借位)。这需要再次借用,所以我们从 1 中减去 0(0 减去 1 的借用加上 10 的新借用):

1 0 1'0'0
0 1 1 0 1
_________
      1 1

然后是 0 中的 1(1 减去借来的 1)。我们再次借用,所以我们从 10 中减去 1:

1 0'1'0'0
0 1 1 0 1
_________
    1 1 1

然后从 -1 得到 1(0 减去借来的 1)。我们再次借,所以我们从 1 中减去 1(0 减去借来的 1 加上新借来的 10):

1'0'1'0'0
0 1 1 0 1
_________
  0 1 1 1

然后 0 从 0(1 减去借来的 1)。最后,没有新的借用,我们有:

1'0'1'0'0
0 1 1 0 1
_________
0 0 1 1 1

我们记得这是负数,所以结果是 -00111。

于 2012-08-27T17:36:16.113 回答
2

解释它的最简单方法是将它们转换为十进制。

+01101 (base 2) = +13 (base 10)
-10100 (base 2) = -20 (base 10)

-20 + 13 = -7

-7 (base 10) = -00111 (base 2)
于 2012-08-27T17:35:53.167 回答
1

首先,当我被困在非十进制基础上做简单的数学运算时,我发现将其转换回十进制以查看发生了什么有时会很有用。

所以,首先,添加数字给了我们

6.75 - 10.0 = -3.25

或者在二进制中,不要太担心指数,因为它们是相同的幂

01101 - 10100 = -00111

手动执行此操作的最佳方法是查找结果

 10100
-01101

使用正常的加法规则,然后反转结果。简要地:

从最左边借 1 以执行减法:

 02100
-01101
 _____
 00111

并且由于最右下列的 1,我们需要再次借用,类似于十进制执行。

现在,让我们仔细检查一下这个结果到底是什么:

-0.0111_2 * 2 ^ 3

实际上是-3.5!之所以如此,是因为将 1.1011 x 2^2 视为 0.1101 x 2^3 而不是其实际值 0.11011 x 2^3 会导致精度下降。

于 2012-08-27T17:36:08.357 回答