知識點:數學;位運算函數
寫一個函數,求兩個整數之和,要求在函數體內不得使用 「+」、「-」、「*」、「/」 四則運算符號。code
輸入: a = 1, b = 1 輸出: 2
不能用四則運算,那其實能夠用的只要邏輯運算和位運算了,這裏很明顯要用位運算。關鍵怎麼用呢。leetcode
咱們列一張表其實就能夠發現,兩個元素若是沒有進位也就是否是對應位都是1的時候,相加就和異或運算的結果是同樣的;若是有進位,也就是兩位上都是1的時候,相加就是二者相與而後左移一位;因此咱們就能夠作了。get
能夠依次獲得兩個數的異或結果和與結果;
sum=a+b=sum+carry;可是求得這兩個後仍是要加,因爲不能用加法,因此能夠再求這兩個結果的與結果和異或結果。直到最後進位的爲0,sum就是答案了。數學
class Solution { public int add(int a, int b) { int sum = a^b; //無進位的; int carry = (a&b) << 1; //有進位的; while(carry != 0){ //進位爲0的時候返回sum; a = sum; b = carry; sum = a^b; carry = (a & b) << 1; } return sum; } }