用位运算实现整数的加减乘除运算

本文介绍了如何使用位运算符实现整数的加减乘除运算,特别是在处理海量数据时能提高效率。通过位移操作实现乘以2的幂次方,通过异或和与运算实现加法,从而推导出其他运算。同时,文章讨论了负数乘除的情况,并提供了测试案例验证位运算的正确性。
摘要由CSDN通过智能技术生成

    基本的C++位运算符有:&(与)、|(或)、~(取反)、^(异或)、>>(右移)、<<(左移)等,众所周知,采用位运算可以极大的提高代码的运行效率。如果有的程序需要处理海量数据,其中又涉及大量简单的加减乘除运算,则可以用位运算来进行操作,减少程序的执行时间。

 例如,a<<n表示将a的值左移n位,相当于将a乘以2的n次方,若有如下语句:

int a=5,b;
b=a<<3;
cout<<"b="<<b<<endl;
输出结果为:b=40

即b=a<<3等价于b=a*8。由此看来,对于一个数a乘以一个数b,若b能够表示成2的n次方的形式,只要采用左移运算即可(但是值得注意的是,要避免溢出!)。

    这里有个问题,那就是如果乘数不是2的n次方的形式该怎么办?解决的方法其实很简单,只要将所要乘的数分解为几个2的n次方相加的形式即可。例如,计算b=a*20,因为20等于2的4次方加2的2次方,所以b=a*20等价于如下的位运算表达式:b=(a<<4)+(a<<2)。

    那么,如果乘数是负数时又该怎么办呢?因为负数在计算机中的存储方式为补码的形式,所以对任意的整数,如下的等式:(~a)+a+1=0恒成立。公式中用到了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值