使用位运算进行加法运算

题目大意

给你两个整数,求a + b,结果不会超过32位整数,但不能用 +、-、*、/等运算符!

思路

①异或运算 = 无进位和 (a ^ b)
②单独提取进位:(a & b) << 1
③无进位和 + 进位 = 答案


Python,Java, C++ 等语言中的数字都是以补码形式存储的。
但Python没有int,long等不同长度变量,即在编程时无变量位数的概念。

python获取负数的补码: 需要将数字与十六进制数 0xffffffff 相与。
可理解为舍去此数字 32 位以上的数字(将 32 位以上都变为 000 ),从无限长度变为一个 32 位整数。


c++版本

class Solution {
public:
    int encryptionCalculate(int dataA, int dataB) {
        while(dataB != 0)
        {
            int c = (unsigned int)(dataA & dataB) << 1;
            dataA ^= dataB;
            dataB = c;
        }
        return dataA;
    }
};

python版本

class Solution:
    def encryptionCalculate(self, dataA: int, dataB: int) -> int:
        x = 0xffffffff
        # 取 补 码
        a,c = dataA & x,dataB & x
        # 直 至 进 位 为 0
        while c != 0:
            a,c = a ^ c,(a & c) << 1 & x
        # 超 过 0x7fffffff【最大正数的补码】,就是负数了,转换【将32位以上的位取反】
        return a if a <= 0x7fffffff else ~(a ^ x)
posted @ 2024-04-07 15:20  gebeng  阅读(27)  评论(0)    收藏  举报