文章目錄
- 371. 兩整數之和
- 解題思路:位運算

371. 兩整數之和
371. 兩整數之和
? 給你兩個整數 a
和 b
,不使用 運算符 +
和 -
,計算并返回兩整數之和。
示例 1:
輸入:a = 1, b = 2
輸出:3
示例 2:
輸入:a = 2, b = 3
輸出:5
提示:
-1000 <= a, b <= 1000
解題思路:位運算
? 既然不用 +
和 -
號,那么八成就是使用位運算操作了,我們在前面總結位運算的時候說過,異或 ^
操作的一個功能就是【無進位相加】,也就是二進制的無進位相加,所以我們只需要找到這個進位,就能做到【有進位相加】了,也就是加法操作!
? 而要找到進位,就只有按位與 &
操作能做到了,因為二進制只有 1
和 1
才能有進位,那么我們只要這種情況,對應的就是按位與 &
操作!
? 總結一下,就是使用 【異或(無進位相加)+按位與(找到進位)】就能解決這道題,只不過按位與得到的進位,需要向左挪動一位才是進位!
class Solution {
public:int getSum(int a, int b) {while(b != 0){int tmp = a ^ b; // 異或操作得到無進位相加的結果b = ((a & b) << 1); // 按位與之后需要向左移動一位才是進位a = tmp;}return a;}
};