用移位来解决乘除法问题
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);
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
183文章
7642浏览量
144602 -
代码
+关注
关注
30文章
4941浏览量
73144
发布评论请先 登录
相关推荐
热点推荐
如何对蜂鸟e203内核乘除法器进行优化
器可以运用各种不同算法来实现除法运算,例如:SRT,Newton-Raphson等。对于不同应用场景,需要选择最适合的算法,从而达到最优的处理器性能表现。
三、总结
蜂鸟E203内核乘除法器的优化是提高
发表于 10-24 06:47
乘除法运算
乘除法运算本应用例的目的在于提供乘、除运算的函数及介绍乘除运算在SPMC75F2413A中的使用。应用例提供有符号和无符号数的乘除,其中包括32-Bit/16-Bit、16-Bit/8-Bit
发表于 09-21 09:26
单片机C语言易错知识点,记住它们会让你事半功倍
是个不错的方法,笔者很喜欢拿到一段代码后用移位代替乘除法来进行优化。不过有时候却会出现问题,比如溢出问题。当很明显可能溢出的话我们是会注意的,比如但是有时候这个问题是不明显的,比如当移位
发表于 08-23 16:36
单片机C语言易错
、 !和 ~ 不一样! 是逻辑非符号,~ 是位取反符号。对IO口某个引脚赋值时不要错用 !如 2、的优先级低于+、-比如要实现c=x*2+1,没有加括号会出错 3、移位要防止溢出其实用移位代替
发表于 11-15 11:41
整数乘除法与位运算的效率对比分析哪个好
文章目录01 - 为什么整数位移比乘除法高效02 - 位移和乘除法对比2.1 - 汇编代码对比2.2 - 编写复杂度对比2.3 - 速度对比03 - 例程3.1 - 例程1,单片机时钟重载值3.1
发表于 12-24 07:33
关于如何提高C语言程序的执行效率
乘除法很消耗CPU资源,查看汇编代码会发现,一个乘除法运算会编译出10几甚至几10行代码。如果是乘以或除以2的n次方,可以用>来实现,这种移位运算在编译时就已经算好了,所以代码很简洁,
汇编实现多字节乘除法
汇编实现多字节乘除法乘法单片机的乘法本质是二进制的乘法,而乘法本身是通过加法实现的。多字节的乘法其实就是移位做加法。例如7x11,用二进制竖式表示如下图:可以看到,其实就是判断乘数的每一位是1还是0
发表于 11-15 17:21
•21次下载

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