• 【leetcode❤python】Sum Of Two Number


    #-*- coding: UTF-8 -*-
    #既然不能使用加法和减法,那么就用位操作。下面以计算5+4的例子说明如何用位操作实现加法:
    #1. 用二进制表示两个加数,a=5=0101,b=4=0100;
    #2. 用and(&)操作得到所有位上的进位carry=0100;
    #3. 用xor(^)操作找到a和b不同的位,赋值给a,a=0001;
    #4. 将进位carry左移一位,赋值给b,b=1000;
    #5. 循环直到进位carry为0,此时得到a=1001,即最后的sum。

    #!!!!!!关于负数的运算。python的位运算!!!!
    #上面思路还算正常,然而对于Python就有点麻烦了。因为Python的整数不是固定的32位,
    #所以需要做一些特殊的处理,具体见代码吧。
    #代码里的将一个数对0x100000000取模(注意:Python的取模运算结果恒为非负数),是希望该数的二进制表示从第32位开始到更高的位都同是0(最低位是第0位)
    #以在0-31位上模拟一个32位的int。
    #没有懂: (~0x100000000+1) 表示 【0x100000000=4294967296】的负数:-4294967296
    class Solution(object):
        def getSum(self, a, b):

            while b:
                carry=a&b
                a=(a^b) % 0x100000000
                b=(carry<<1)% 0x100000000

          

            return a if a <= 0x7FFFFFFF else a | (~0x100000000+1)

    sol=Solution()
    print sol.getSum(-12,-2)

  • 相关阅读:
    c#设计模式(1)——单例模式
    Javascript变量
    悲观锁和乐观锁
    NestJs 环境 配置
    分布式查询
    Git hub 忽略 文件 、文件夹
    ES6 基础 二
    ES6 基础 一
    invalid credential, access_token is invalid or not latest hint(微信 上传图片返回 error)
    nodejs 入门一(环境及插件)
  • 原文地址:https://www.cnblogs.com/kwangeline/p/5953721.html
Copyright © 2020-2023  润新知