討論 C語言中移位操作的效率與乘法比較

2021-09-25 04:28:31 字數 766 閱讀 2869

**自:

[討論]微控制器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寫成二進位制數是...