题目链接
需要用到的位运算操作:异或(^)、与(&)、右移(<<)
- 异或运算:又称不进位加法,a^b得到的结果为a与b相加,但是需要进位的地方不进位得到的结果
- 与运算:找出来a和b中均为1的位置,利用右移操作来实现进位
- 可以转换成位运算: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