很多人都知道,在C中算术运算的效率是,减法高于加法、乘法高于除法。
1.for(int i=1000;i>0;i--) 明显优越于 for(int i=0;i<1000;i++)
2.a=x/(y*z) 明显优越于 a=x/y/z
等等 等等
这些垃圾我就不多说了 现在重点来了
用位运算替代乘除运算,众所周知位运算的运算效率明显高于任何算术运算
x=a/4; 可以优化为 x=a>>2; 当然是在不考虑丢失有效位的情况下
x=a/2^n 明显可以优化为 x=a>>n
这个很明显了 下面我们来讨论家 乘法
x=a*Y 若Y 可以转化为 2^n的情况下
x=a*Y 都可优化为 x=a<<n
x=a*Y 若Y 不可以转化为 2^n的情况下该怎么办呢?
我们来看下面几个例子
z=y*9; //9=2^3+1
z=(y<<3)+y;
z=y*10; //10=2^3+2
z=(y<<3)+2*y;
z=y*33; //33=2^5+1
z=(y<<5)+y;
z=y*35; //35=2^5+3
z=(y<<5)+3*y;
看到这里大家应该都很明白了,我也不说废话了,把这些都用到自己的程序的,让它闪闪发光吧~