算法之不用+-*/实现同样的效果

算法之不用±*/实现同样的效果

加法

思路:

1. 利用不进位的 按位 ^ 处理不进位的情况
2. 利用 & 处理进位的 <<1
3. 整个过程递归

###参考知识:
位运算基础知识:地址

模拟运行

  1. 假设 1+2 (不进位的情况)

     0001
    ^0010
     0011
    
      0001
     &0010
      0000
    结论 :在没有进位的情况下 ^ 操作就是 +  1+2=3(0011)
    
  2. 假设1+3(进位的情况)

    1. 第一轮:
  	 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 进位后,递归调用方法,再次计算,还需要进位不?

减法

实际就是带入负数计算

乘法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值