第一步:化简
当二进制数的每一位加法中不发生进位时,按位异或的结果就是最终的加法结果,那么需要做的就是将所有的加法操作最终都简化成没有进位的加法操作,最终的结果就是两个数按位异或的结果。
第二步:处理有进位的数据
对于有进位的 我们可以认为是那些缺少的数据 我们需要通过进位加法得到后重新进行按照没有进位的继续相加。
代码:
public static void testAaddB(){
// 每次递归中都进行异或、相与左移1,然后,将得到的结果再做同样的操作,直到进位为0,递归停止
int a = 5;
int b = 9;
while (b != 0)
{
int tmpa = a ^ b;
int tmpb = (a & b) << 1;
a = tmpa;
b = tmpb;
System.out.println("tmpa: " + a);
System.out.println("tmpb: " + b);
}
System.out.println(a);
}