C语言如何用移位来解决乘除法问题

描述

用移位来解决乘除法问题

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);
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分