概述
转发自:http://www.dzsc.com/dzbbs/20050626/200765193823531286.html
[讨论]单片机C语言中移位操作的效率与乘法比较
今天用GCC做了几个小测试有一点发现,提供给大家参考。
现有两个变量
LONG A;
CHAR B;
1 需要进行如下运算:
A=A*16+B;
如果改用
A=(A<<4)+B;
到底那个快?
结果:A=(A<<4)+B;快一些。
原因:长整型乘法运算比较慢。
2 需要进行如下运算:
A=A*256+B;
如果改用
A=(A<<8)+B;
到底那个快?
结果:A=(A<<8)+B;快很多。
原因:在A=(A<<8)+B;中,程序自动将A的高三字节采用赋值传递,所以大量地节省了运算时间。
3 增加变量C,需要进行如下运算:
C=256;
A=A*C+B;
如果改用
C=8;
A=(A<<C)+B;
到底那个快?
结果:A=(A*256)+B;快。
原因:由于移位的位数保存在变量C中,程序无法采用针对性的优化,只得采用循环的逐位移动,造成移动位数多时速度降低。
结论
看起来不能简单地认为移位运算就比2的幂乘法快,还需要根据移位的多少来具体分析,乘数比较大时,移位次数增多,采用循环的逐位移动速度反而不高,而移位次数少时效率还可以,当移位次数为8或16时则可能获得最大的效率。
希望大家参与讨论。
最后
以上就是醉熏酸奶为你收集整理的[讨论]C语言中移位操作的效率与乘法比较的全部内容,希望文章能够帮你解决[讨论]C语言中移位操作的效率与乘法比较所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复