• 利用位运算进行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
    
    
  • 相关阅读:
    百度地图-放大地图
    haroxy hdr
    haproxy path_beg
    haproxy /admin跳转 不会在接口上再次加上admin
    api 跳转规则
    如何利用BI搭建电商数据分析平台
    如何利用BI搭建电商数据分析平台
    北向接口与南向接口
    perl 传递对象到模块
    mysql 监控 大批量的插入,删除,和修改
  • 原文地址:https://www.cnblogs.com/Friends-A/p/10324312.html
Copyright © 2020-2023  润新知