不使用運算子 + 和 - ,計算兩整數 a 、b 之和。
示例:
輸入: a = 1, b = 2
輸出: 3
輸入: a = -2, b = 3
輸出: 1
在做 10 進製加法時,例如15 + 6,我們先將低位相加得到結果的低位 1 和進製 1,將進製 1 和高位 1 相加就得到了結果的高位 2,最終的結果為 21。所以求加法的過程中,我們要得到當前位的結果和進製。
推廣到二進位制,有
0 & 0 = 0, 0 ^ 0 = 0;
0 & 1 = 0, 0 ^ 1 = 1;
1 & 0 = 0, 1 ^ 0 = 1;
1 & 1 = 1, 1 ^ 1 = 0;
我們發現兩個二進位制位做異或就是相加得到的當前位的結果,做與操作就是進製。
所以,我們將 a, b 進行異或操作得到當前位的結果,進行與操作得到進製,如果進製為0,則退出迴圈,否則將當前步的結果賦值給 a,將進製左移一位的結果賦值為 b。**如下:
class solution
return ans; // 返回 ans
}};
注意,進製的型別要是無符號整數。 LeetCode之位運算
public intadd int a,int b return a 劍指offer 64 求1 2 n 難度 中等 求 1 2 n 要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 題解 用遞迴的方法的 public intsumnu...
位運算實現兩個整數的加法運算
最近在看一本 程式設計師面試寶典 在程式設計基本概念這一章中多次出現了按位與,異或等二進位制的計算,下面這道題就是其中之一 先放 include int add const int a,const int b if b 0 return a 設定遞迴退出條件 else int sum,carry s...
每日LeetCode之兩整數相除
解決方案一 採用二分法,能夠較快的解決不採用除法,乘法以及mod方法來計算兩個整數的除法的問題。public int divide int dividend,int divisor 判斷結束後全部當做正數進行操作 使用long解決數值溢位情況 long ldividend math.abs long...