利用位运算进行a+b的计算(Java&&Python)

题目链接
需要用到的位运算操作:异或(^)、与(&)、右移(<<)

  • 异或运算:又称不进位加法,a^b得到的结果为a与b相加,但是需要进位的地方不进位得到的结果
  • 与运算:找出来a和b中均为1的位置,利用右移操作来实现进位
  • a+ba+b可以转换成位运算:a+b=(a^b)+(a&b<<1),持续进行到a&b=0结束即可

Java代码:

public class Solution {
    /**
     * @param a: An integer
     * @param b: An integer
     * @return: The sum of a and b 
     */
    public int aplusb(int a, int b) {
        while(b!=0){
            int _a=a^b;
            int _b=(a&b)<<1;
            a=_a;
            b=_b;
        }
        return a;
        // write your code here
    }
}

Python代码:

对于Python来说,因为Python没有符号位右移操作,所以需要检查当前数字是否超过了int范围,0xffffffff保证了在位运算的过程中,数字范围均不超过int
while循环结束后,将结果与0x7fffffff比较
如果小于等于0x7fffffff,说明当前结果没有超过int范围,直接输出
如果大于0x7fffffff,说明当前结果超出了int范围,需要转换到int范围内

class Solution:
    """
    @param a: An integer
    @param b: An integer
    @return: The sum of a and b 
    """
    def aplusb(self, a, b):
        while(b!=0):
            # &0xffffffff的目的是将a,b的范围限制在int内
            a,b=(a^b)&0xffffffff,((a&b)<<1)&0xffffffff
        # 和int范围的最大值进行比较
        if a<=0x7fffffff:
            return a
     # 将无符号位的数转换成有符号位的数
        else:
            return ~(a^0xffffffff)
        # write your code here

原文地址:https://www.cnblogs.com/Friends-A/p/10324312.html