不使用“+”“-”操作符計算兩數之和
算法思路:
- 設有a=3,b=6
- a=0011, b =0110
- 所以不進位和是5 =0101,進位爲2 =0010
所以a+b就變成了5+2<<1
然後有5 =0101, 2<<1 =0100
- 不進位和是1 =0001, 進位是4 =0100
所以a+b變成1+4<<1
然後有1 =0001, 4<<1 =1000
- 不進位和是9 =1001, 進位是0 =0000
實現代碼如下:
public static int getSum(int a, int b){
int Carry = a&b; //進位
int SumNoCarry = a^b; //非進位
if(Carry != 0)
return getSum(Carry<<1, SumNoCarry);
else
return SumNoCarry;
}