劍指offerNo48. 不用加減乘除做加法(Java)

題目描述:

寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號。

思路:

不能用四則運算,那麼可是使用位運算

如:  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);
    }
}

我是個正兒八經的女孩紙  所以會快樂的 ..

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章