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’