本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第2章,建议12-4作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
建议12-4:用移位运算实现乘除法运算
用移位运算来实现乘除法运算的方法,相信大家并不陌生,实际上有很多C编译器都能够自动地做好这个优化。通常,如果需要乘以或除以2n,都可以用移位的方法代替。
例如:
a=a*2;
b=b/2;
可以修改为如下形式:
a=a<<1;
b=b>>1;
其中,除以2等价于右移1位,乘以2 等价于左移1位。同理,除以4等价于右移2位,乘以4 等价于左移2位;除以8等价于右移3位,乘以8 等价于左移3位,以此类推。
其实,利用上面的原理,只要是乘以或除以一个整数,均可以用移位运算的方法来得到结果,例如:
a=a*5;
可以将其分解为a(4+1),即a4+a*1。由此,我们就可以很简单地得到下面的程序表
达式:
a=(a<<2)+a