两整数之和

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-of-two-integers

题目描述:

给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。

示例 1:

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

示例 2:

输入:a = 2, b = 3
输出:5

思路:

使用位运算,从第1位开始构建结果的二进制.

  • 如果a和b二进制的第i位都为1,代表结果result的第i位是0还是1,由进位carry决定。
    -- carry为0,result的第i位为0
    -- carry为1,result的第i位为1
    -- 设置carry = 1
  • 如果a和b二进制的第i位其中一个为1,代表结果result的第i位是0还是1,由进位carry决定。
    -- carry为0,result的第i位为1
    -- carry为1,result的第i位为0,且需要进位,carry = 1
  • 如果a和b二进制的第i位都为0,代表结果result的第i位是0还是1,由进位carry决定。
    -- carry为0,result的第i位为0
    -- carry为1,result的第i位为1,且需要重制carry = 0
代码实现:
class Solution {
    public int result = 0;
    public int carry = 0;
    public int getSum(int a, int b) {
        for (int i = 0; i < 32; i++) {
            // 获取a二进制的第i位
            int ai = (a >> i) & 1;
            // 获取b二进制的第i位
            int bi = (b >> i) & 1;
            if (ai == 1 && bi == 1) {
                // 如果都等于1,代表需要进位.
                result |= (carry << i);
                carry = 1;
            } else if (ai == 1 || bi == 1) {
                // 进位为0,则第i位为1,反之则为0.
                result |= ((1 ^ carry) << i); 
            } else {
                result |= (carry << i);
                carry = 0;
            }
        }
        return result;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容