本题思想:
①先求num1和num2的和SUM,不包括进位
②再求num1和num2相加所产生的进位值
③SUM和进位值相加,转向①,直到没有进位,则结束
符号转换:
①不考虑进位
1+1 =0, 0+1=1,0+0=0
1^1 =0, 0^1=1, 0^0=0
②进位
1+1 =1, 0+1=0,0+0=0
1&1 =1,0&1=0,0&0=0
int add(int num1, int num2)
{
if(0==num2) return num1; //无进位
int sumTemp =num1^num2; //①
int carry = (num1&num2)<<1; //②
return add(sumTemp,carry);
}
例如:
3+2=5 , 即0011+0010 = 0101
round1:
sumTemp = 0011
^ 0010
---------
0001
carry = 0011
&0010
---------
0010 <<1 =0100
Round 2:
sumTemp = 0001
^ 0100
---------
0101
carry = 0001
&0100
---------
0000 ->return 结束