**自:
[討論]微控制器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<到底那個快?
結果:a=(a*256)+b;快。
原因:由於移位的位數儲存在變數c中,程式無法採用針對性的優化,只得採用迴圈的逐位移動,造成移動位數多時速度降低。
結論 看起來不能簡單地認為移位運算就比2的冪乘法快,還需要根據移位的多少來具體分析,乘數比較大時,移位次數增多,採用迴圈的逐位移動速度反而不高,而移位次數少時效率還可以,當移位次數為8或16時則可能獲得最大的效率。
希望大家參與討論。
C語言中移位操作
先要了解一下c語言裡所有的位運算都是指二進位制數的位運算。即使輸入的是十進位制的數,在記憶體中也是儲存為二進位制形式。用法 格式是 a 0。功能 將整型數a按二進位制位向左移動m位,高位移出後,低位補0。用法 格式是 a m,a和m必須是整型表示式,要求m 0。功能 將整型數a按二進位制位向右移動m...
C語言中的移位操作
c語言中的移位操作,內容不多。不過有些地方你不注意,就疏忽了。先做兩個小題先。1 unsigned char x 3 x 1是多少?x 1是多少?2 char x 3 x 1是多少?x 1是多少?3 char x 3 x 1是多少?x 1是多少?3寫成二進位制數是00000011 3寫成二進位制數是...
C語言中的移位操作
c語言中的移位操作,內容不多。不過有些地方你不注意,就疏忽了。先做兩個小題先。1 unsigned char x 3 x 1是多少?x 1是多少?2 char x 3 x 1是多少?x 1是多少?3 char x 3 x 1是多少?x 1是多少?3寫成二進位制數是00000011 3寫成二進位制數是...