題目描述:
寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號。
思路:
不能用四則運算,那麼可是使用位運算
如: 5 + 17 =22 其中5的二進制(101),17的二進制(10001)
- 先不考慮進位, 1+1 = 0, 1+0 = 1, 1+0= 1, 0+0 = 0 可以看出是異或,
-
^ 異或 兩個位相同爲0,相異爲1 - 考慮進位, 0+1,0+0,1+0都不會產生進位,只有1+1會產生進位。因此使用'與'操作,與完之後左移一位即可
-
& 與 兩個位都爲1時,結果才爲1 - 重複前兩步,直到不再產生進位爲止。
代碼:
package offer01;
public class TestNo48 {
public static void main(String[] args) {
System.out.println(new TestNo48().Add(17,5));
}
public int Add(int num1,int num2) {
int sum = num1 ^ num2;
int carry = (num1 & num2) << 1;
if(carry == 0)
return sum;
else
return Add(sum,carry);
}
}