leetcode 371. Sum of Two Integers

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

Example:
Given a = 1 and b = 2, return 3.

只能位运算:

0x01101011 ^

0x00111001

----------

0x01010010

 

0x01101011 &

0x00111001

---------

0x00101001 <<1

---------

0x01010010

class Solution {
public:
    int getSum(int a, int b) {
        if (a==0) return b;
        return getSum((a&b)<<1, a^b);
    }
};

迭代解法:

复制代码
class Solution {
public:
    int getSum(int a, int b) {
        int carry = 0;
        while (a != 0) {
            carry = (a & b) << 1;
            b = a ^ b;
            a = carry;            
        }
        return b;
    }
};
复制代码

 python版本:不明白 ~(a ^ mask) 是。。。

复制代码
class Solution(object):
    def getSum(self, a, b):
        """
        :type a: int
        :type b: int
        :rtype: int
        """
        # 32 bits integer max
        MAX = 0x7FFFFFFF
        # 32 bits interger min
        MIN = 0x80000000
        # mask to get last 32 bits
        mask = 0xFFFFFFFF
        while b != 0:
            # ^ get different bits and & gets double 1s, << moves carry
            a, b = (a ^ b) & mask, ((a & b) << 1) & mask
        # if a is negative, get a's 32 bits complement positive first
        # then get 32-bit positive's Python complement negative
        return a if a <= MAX else ~(a ^ mask)
复制代码

 

posted @   bonelee  阅读(329)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2017-03-17 MongoDB C++ gridfs worked example
2017-03-17 linux编程 fmemopen函数打开一个内存流 使用FILE指针进行读写访问
点击右上角即可分享
微信分享提示