在加法算法二进制中,进位乘以 2 的点是啥?

Posted

技术标签:

【中文标题】在加法算法二进制中,进位乘以 2 的点是啥?【英文标题】:In Addition Algorithm binary what is point of multiplying carry with 2?在加法算法二进制中,进位乘以 2 的点是什么? 【发布时间】:2021-09-12 05:52:16 【问题描述】:

要添加 a 和 b,首先添加它们最右边的位。这给 a0 + b0 = c0 ⋅ 2 + s0, 其中 s0 是​​ a + b 的二进制扩展中的最右边位,而 c0 是进位,即 0 或 1。 然后将下一对位和进位相加,a1 +b1 +c0 =c1 ⋅2+s1,

因为我们只是将进位 C0 与下一个操作相加,而不乘以 2 ????为什么?还是我错了?

提前致谢

【问题讨论】:

在二进制中,下一个数字已经是前一个数字的两倍,所以不需要乘以 2 这里c1 ⋅2+s1表示“写为位c1后跟位s1的2位数字”,就像十进制一样,a*10 + b表示“写为数字的2位数字a 后跟数字 b"。例如,十进制数 63 可以写为6*10+3。在加法算法中,左位或左位数将成为进位。 【参考方案1】:

我将尝试用一个简单的例子来解释这一点。 我们正在添加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) 上的位相加。

如果没有 c0 上的 2* 乘法,a1 +b1 +c0 =c1 ⋅2+s1 上的加法是不可能的,否则我们将添加 10(a1) + 00(b1) + 01(c0),这不是第二个二进制位置的预期结果

【讨论】:

以上是关于在加法算法二进制中,进位乘以 2 的点是啥?的主要内容,如果未能解决你的问题,请参考以下文章

模2运算的原理 模2加法,模2减法,模2乘法,模2除法

C中的计数进位操作

不用加号运算

zzulioj - 2624: 小H的奇怪加法

基础编程题之不用加减乘除做加法

剑指offer42:不用加减乘除做加法