两整数之和

题目链接

两整数之和

题目描述

两整数之和_第1张图片

注意点

  • 不使用 运算符 + 和 - ​​​​​​​,计算并返回两整数之和
  • -1000 <= a, b <= 1000

解答思路

  • 需要用位运算来模拟加法,关键是要找到相加的和以及进位1的部分。如果不考虑进位的话,相加可以运用异或,如0001^0111的结果是0110;计算后还要考虑末尾两个1相加后进位1的部分,本次进位的部分可以根据a & b进行计算,其影响的是更上一位,所以还需要左移即(a & b) << 1,随后还要继续根据进位1的部分继续计算其结果,以此类推…
  • 计算主要分为三个步骤:一是计算a和b的进位影响位置c,即(a & b) << 1;二是计算a和b不受进位影响的和,即a ^ b,并赋值给a;三是将进位影响位置c赋值给b,方便循环计算结果

代码

class Solution {
    public int getSum(int a, int b) {
        while (b != 0) {
            // 存储进位影响位置
            int c = (a & b) << 1;
            // 计算忽略进位时a与b的和
            a = a ^ b;
            b = c;
        }
        return a;
    }
}

关键点

  • 掌握位运算

你可能感兴趣的:(算法,数据结构,leetcode,算法,java,位运算)