LeetCode 371. 2つの整数の合計(ビット演算の加算)

1.タイトル

演算子+および- を使用しない場合

示例 1:
输入: a = 1, b = 2
输出: 3

示例 2:
输入: a = -2, b = 3
输出: 1

出典:LeetCode
リンク:https ://leetcode-cn.com/problems/sum-of-two-integers
著作権は控除ネットワークに属しています。商用転載の正式な許可書に連絡し、非商用転載の出典を明記してください。

2.問題解決

同様の質問:Jianzhiオファーインタビューの質問65.加算、減算、乗算、および除算は加算に必要ありません(ビット演算、依存)

  • ビット操作、aとbの各バイナリビットを分類して説明する
class Solution {
public:
    int getSum(int a, int b) {
        int sum = 0, one = 0, curBit;
        int bitA, bitB;
        for(int i = 0; i <= 31; ++i)
        {
        	bitA = (a&(1<<i)), bitB = (b&(1<<i));
            //获取a, b 的每一个二进制位
        	if((bitA^bitB))//不同0,1 或者 1,0
        	{
        		curBit = 1;//当前位和1
        		if(one)//如果上一次有进位
        			curBit = 0;//当前位为0,进位one还是1
        	}
        	else//相同0,0 或者 1,1
        	{
        		curBit = 0;//当前位肯定为0
        		if(one)//上一次有进位
        			curBit = 1;//当前位为1
        		if(bitA&bitB)//两个位都为1
        			one = 1;//产生进位
        		else//两个都为0
        			one = 0;//无进位
            }
        	if(curBit)//当前位为1
        		sum |= (1<<i);//加入到sum
        }
        return sum;
    }
};

0 ms 6 MB

892件の元の記事を公開 2665 件を賞賛 470,000回の閲覧

おすすめ

転載: blog.csdn.net/qq_21201267/article/details/105645358