算法之不用±*/实现同样的效果
加法
思路:
1. 利用不进位的 按位 ^ 处理不进位的情况
2. 利用 & 处理进位的 <<1
3. 整个过程递归
###参考知识:
位运算基础知识:地址
模拟运行
-
假设 1+2 (不进位的情况)
0001 ^0010 0011 0001 &0010 0000 结论 :在没有进位的情况下 ^ 操作就是 + 1+2=3(0011)
-
假设1+3(进位的情况)
- 第一轮:
0001
^0011
0010
0001
&0011
0001
结论 :需要进一位, 把存 不需要进位的 只 a=0010 b=0001 带入第二轮
2. 第二轮
```
0010
^0001
0011 //3
0010
&0001
0000//没有需要进位,递归结束
```
代码实现
def add(a,b):
d=a^b#按位异或,获取不进位 +结果
c=a&b #按位与 获取进位的 位数
if c==0:
return d#如果c==0 则不需要进位,返回d 就是+的结果
return add(d,c<<1)#需要进位,c<<1 进位后,递归调用方法,再次计算,还需要进位不?
减法
实际就是带入负数计算