用移位来解决乘除法问题
a=a*4;
b=b/4;
可以改为:
a=a< < 2;
b=b > >2;
通常如果需要乘以或除以2的n次方,都可以用移位的方法代替。用移位的方法得到代码比调用乘除法子程序生成的代码效率高。实际上,只要是乘以或除以一个整数,均可以想办法用移位的方法得到结果,如:
a=a*9
可以改为:
a=(a< < 3)+a
采用运算量更小的表达式替换原来的表达式,下面是一个经典例子:
原代码:
x = w % 8;
y = pow(x, 2.0);
z = y * 33;
for (i = 0;i < MAX;i++)
{
h = 14 * i;
printf("%d", h);
}
修改为:
x = w & 7; /* 位操作比求余运算快*/
y = x * x; /* 乘法比平方运算快*/
z = (y < < 5) + y; /* 位移乘法比乘法快 */
for (i = h = 0; i < MAX; i++)
{
h += 14; /* 加法比乘法快 */
printf("%d",h);
}
如此,对比一下执行时间会快很多。
学会避免不必要的整数除法
整数除法是整数运算中最慢的,所以应该尽可能避免。一种可能减少整数除法的地方是连除,这里除法可以由乘法代替。这个替换的副作用是有可能在算乘积时会溢出或者丢失精度,所以只能在一定范围的除法中使用。
举个例子,不好的代码:
int i, j, k, m;
m = i / j / k;
推荐的代码: 注意精度
int i, j, k, m;
m = i / (j * k);
全部0条评论
快来发表一下你的评论吧 !