此处采用位运算,a+b无进位的结果和a^b相等,0 + 1 = 1 == 0 ^ 1 = 1
a+b的进位等于 (a&b) << 1 3+1的进位为 (11 & 1) << 1 = 10
public int add(int a, int b) {
//进位为0时跳出
while(b != 0){
//进位
int c = (a & b) << 1;
//无进位和
a = a^b;
//进位
b = c;
}
return a;
}
运算3+1:
-
1 != 0 进入循环 进位c = (11 & 1) << 1 = 10
a = 11 ^ 1 = 10
b = 10 -
第二次循环 10 != 0
c = (10 & 10) << 1 = 100
a = 10 ^ 10 = 0
b = 100 -
第三次循环 100 ! = 0
c = ( 0 & 100) << 1 = 0
a = a ^ 100 = 100
b = 0; -
结束 结果为 4