在加法算法二进制中,将进位与 2 相乘有何意义?

问题描述

要添加 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 = 101+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),这不是第二个二进制位的期望结果

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...