题目大意
给你两个整数,求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)
标签:运算,int,32,加法,dataA,dataB,使用,进位
From: https://www.cnblogs.com/gebeng/p/18119127