写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
🐂🍺解法(仅限python):
class Solution:
def Add(self, num1, num2):
# write code here
res = []
res.append(num1)
res.append(num2)
return sum(res)
位运算
位运算加法分普通加法+位运算
使用异或运算不能实现进位操作 1^1=0(错误)
使用与或运算也不准确,1&0=0(错误)
一位加法
普通加法 | 异或 |
---|---|
1+1=0 | 1^1=0 |
1+0=1 | 1^0=1 |
0+1=1 | 0^1=1 |
0+0=0 | 0^0=0 |
位运算 |
---|
1&1=1(进位) |
1&0=0(不进位) |
0&1=0(不进位) |
0&0=0(不进位) |
在位运算中,我们用"<<"表示向左移动一位,也就是“进位”。那么我们就得到了如下的运算方法(x&y<<1)
拥有了两个基本表达式:
- 执行加法运算:x^y
- 执行进位操作:(x&y)<<1
二位加法
正常的加法运算:11+01=100
使用位运算实现二位加法:
- 按位加法:res1=11^01=10
- 按运算进位:res2=(11&01)<<1=(01)<<1=010
- res1^res2=10 ^ 010 =00
- (10&&010)<<1=(10)<<1=100
以此类推
class Solution:
def Add(self, num1, num2):
# write code here
while num2!=0:
temp=num1^num2
temp1=(num1&num2)<<1
num1=temp
num2=temp1
return temp