在程序员面试宝典中,看到了这个知识点,在这里记录一下实现代码。
#include <iostream>
using namespace std;
int add(int a,int b)
{
if(b==0) return a;
int sum,carry;
sum=a^b;
carry=(a&b)<<1;
return add(sum,carry);
}
int main()
{
int a,b;
cin>>a;
cin>>b;
cout<<add(a,b)<<endl;
return 0;
}
add函数中,其中a&b是取a与b相同位的一半,再左移一次<<之后就是a与b相同位的一半的两倍了,而a^b是取a和b的不同位,这个时候相当于不变,将其相加即为将a和b的相同位与不同位都加在一起,即实现了两个数相加,其中还考虑到了进位的情况。不过不足的是使用了循环,比较麻烦。