文章目錄
- 題目鏈接:
- 題目描述:
- 解法
- C++ 算法代碼:
題目鏈接:
371. 兩整數之和
題目描述:
解法
筆試的話直接
return a+b;
接下來講一下這題的解法:
位運算(異或運算-無進位相加)
例如:
13
和28
13+28=41
13
的二進制位a
:001101
28
的二進制位b
:011100
a^b
:010001因為異或運算是無進位相加,所以我們要找到進位相加的部分。
只有1
和1
異或是1
,如上圖所示,剛好和&
的運算規則一樣。
C++ 算法代碼:
class Solution
{public:int getSum(int a, int b) {while(b != 0){int x = a ^ b; // 先算出無進位相加的結果unsigned int carry = (unsigned int)(a & b) << 1; // 算出進位a = x;b = carry;}return a;}
};