/**
* A+B
* @param a: An integer
* @param b: An integer
* @return: The sum of a and b
* 进位操作和加操作分开,进位为0时结束
* 进位操作:同为1时进位1-----与(&)操作,再左移一位
* 加操作:异或
*/
int aplusb(int a, int b) {
// a进位,b加
while(a!=0) {
int temp=(a&b)<<1;
b=a^b;
a=temp;
}
return b;
}
以3+2为例
初始值 | 第一次 | 第二次 | 第三次 | |
求与,再左移一位(进位) | 0011 | 0100 | 0000 | |
异或(无进位加法) | 0010 | 0001 | 0101 |