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

cserver side programmingprogramming

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

使用按位运算求和的逻辑与我们在幼儿园时所做的类似。为了求和,我们过去常常将数字的每一位相加,如果有进位,我们就将其加到下一位。

我们将做类似的事情,使用 XOR 运算符求和,并使用 AND 运算检查进位。如果有进位,我们就将其加回到数字中,否则不加。

这是您可能在数字电子学中学到的半加法器的逻辑。

现在,使用 a^b 即 XOR b 计算总和,我们需要检查是否需要传播额外的进位,如果两者的第一位都设置了的话。我们需要在数字中添加一个额外的设置位。

因此,位算法将是

步骤 1 − 找到 a 和 b 的 XOR,即 a^b 并将其存储在结果变量中。

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

步骤 2.1 −如果等于0,则打印结果,即为最终结果。

步骤2.2 − 如果不等于0,则转到步骤1,a = {(a & b) << 1} 且 b = result。

示例

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

#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("使用按位加法将 %d 和 %d 相加为 %d", a, b, addNumbers(a, b));
   return 0;
}

输出

使用按位加法将 54 和 897 相加为 951’

相关文章