位操作实现加减乘除和幂运算

位操作实现加减乘除和幂运算

位操作在一定程度上加快了计算的速度,上本科的时候实现过位运算的各种运算,时间长了已经忘光了,拿出来重新实现实现。

 

位操作回顾

与(&):同真为真,其余为假 0&0=0、0&1=0、1&0=0、1&1=1

或(|):有真为真,无真为假0|0=0、0|1=1、1|0=1、1|1=1

非(~):真变假,假变真~0=1、~1=0

异或(^):不同为真,相同为假0^0=0、0^1=1、1^0=1、1^1=0

 

加法

各种运算中加法应该算是基础,所以我们先实现加法。

模拟小学加法运算,每位相加,一位存不下则向上进位。0 | 0 = 0、 0 | 1 = 1、1 | 0 = 1、 1 | 1 = 10,只观察最后一位我们发现与异或运算时匹配的,然后需要考虑的是1|1=10进位的问题。

1|1=10进位也只可能实在1|1的情况,因此我们只需要考虑1、1的情况,恰好是与的情况,然后向左移一位变成了进位了。

不考虑进位的加法=异或(^)

进位=与(&)

到这一步大家应该也可以想到了,先把两个数的异或运算拿到,然后获得两个数的进位,接下来的就是把这两个数相加了,那是不是又有问题了!我们是来实现加法运算的,结果又需要调用加法运算!这不是相互矛盾么!

对啊!我们不是实现加法运算么,那就把这两个数再调用一次加法运算呗!那啥时候是个头呢?

0加任何数不都得原值么,进位始终是要进完的,所以进位到不能进位为止,咱们就可以返回这个值了。

int add(int a, int b){
    int yihuo, yu;

    yihuo = a ^ b;        //不考虑进位的加法操作
    yu  = (a & b) << 1;   //进位
    if(yu == 0){
        return yihuo;
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值