在加法算法二进制中,进位乘以 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 的点是啥?的主要内容,如果未能解决你的问题,请参考以下文章