LeetCode 371. 两整数之和(位运算加法)

1. 题目

不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-of-two-integers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:剑指Offer - 面试题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 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/qq_21201267/article/details/105645358