问题描述
要添加 a 和 b,首先添加它们最右边的位。这给 a0 + b0 = c0 ⋅ 2 + s0, 其中 s0 是 a + b 二进制扩展中最右边的位,c0 是进位,即 0 或 1。 然后加上下一对位和进位,a1 +b1 +c0 =c1 ⋅2+s1,
因为我们只是在下一个操作中添加进位 C0 而没有乘以 2 ????为什么?还是我错了?
提前致谢
解决方法
我将尝试用一个简单的例子来解释这一点。
我们正在添加 3(a) + 5(b)
或 11 + 101
。按照上面描述的算法我们得到。
要添加 11(a)
和 101(b)
,首先添加它们最右边的位。 1(a0) + 1(b0)
。这给出了 1(a0) + 1(b0) = 1(c0) * 2 + 0(s0)
。
这里在二进制中乘以 2 是一个位移,您将把 1 移动到数字中的下一个二进制位置,所以 1*2+0 = 10
是 1+1
的结果。
所以在下一对位 1(a1) + 0(b1) + 1(c0) = 1(c1)*2+0(s1)
之后。
这似乎违反直觉,但 c0 数字最初属于第一个二进制位 (0th index)
,通过将其乘以 2,我们确保我们可以将其与第二个二进制位 (1st index)
上的位相加。
如果没有 a1 +b1 +c0 =c1 ⋅2+s1
上的 2*
乘法,c0
上的加法是不可能的,否则我们会加上 10(a1) + 00(b1) + 01(c0)
,这不是第二个二进制位的期望结果