zoukankan      html  css  js  c++  java
  • 利用位运算进行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
    
    
  • 相关阅读:
    Objective-C中的锁及应用-13- 多线程
    Android开发技术周报 Issue#53
    Android开发技术周报 Issue#52
    Android开发技术周报 Issue#54
    Android开发技术周报 Issue#55
    Android开发技术周报 Issue#56
    Android开发技术周报 Issue#57
    Android开发技术周报 Issue#58
    Android开发技术周报 Issue#60
    Android开发技术周报 Issue#61
  • 原文地址:https://www.cnblogs.com/Friends-A/p/10324312.html
Copyright © 2011-2022 走看看