我是靠谱客的博主 醉熏酸奶,最近开发中收集的这篇文章主要介绍[讨论]C语言中移位操作的效率与乘法比较,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

转发自: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语言中移位操作的效率与乘法比较所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部