C语言中两个整数的按位递归加法


在这个问题中,我们得到了两个数字。我们的任务是创建一个 C 程序,用于两个整数的按位递归加法。

使用按位运算查找和的逻辑类似于我们在学前班时所做的。为了找到和,我们习惯于将数字的每一位相加,如果存在进位,则将其加到下一位。

我们将做类似的事情,使用异或运算符找到和,并使用与运算符检查进位。如果存在进位,我们将将其加回到数字中,否则不加。

这是您可能在数字电子学中学习过的**半加器**的逻辑。 请参考此处…

现在,和使用 a^b(即 a 异或 b)计算,我们需要检查是否需要传播额外的进位,如果两个数字的第一位都为 1,或者类似情况。我们需要在数字中添加一个额外的设置位。

因此,位算法将是

步骤 1 - 查找 a 和 b 的异或,即 a^b,并将其存储在结果变量中。

步骤 2 - 检查 {(a & b) << 1} == 0

步骤 2.1 - 如果它等于 0,则打印结果,它是最终结果。

步骤 2.2 - 如果它不等于 0,则转到步骤 1,其中 a = {(a & b) << 1} 且 b = 结果。

示例

程序说明算法的工作原理 -

 在线演示

#include <stdio.h>
int addNumbers(int a, int b) {
   int carry = (a & b) << 1;
   int result = a^b;
   if (carry == 0)
      return result;
   else
      addNumbers(carry, result);
}
int main(){
   int a = 54, b = 897;
   printf("The sum of %d and %d using bitwise adding is %d", a, b, addNumbers(a, b));
   return 0;
}

输出

The sum of 54 and 897 using bitwise adding is 951’

更新于: 2020年8月5日

3K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告