用移位來解決乘除法問題
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語言
+關注
關注
180文章
7614瀏覽量
137736 -
代碼
+關注
關注
30文章
4828瀏覽量
69059
發布評論請先 登錄
相關推薦
乘除法運算
單片機C語言易錯知識點,記住它們會讓你事半功倍
單片機C語言易錯
整數乘除法與位運算的效率對比分析哪個好
關于如何提高C語言程序的執行效率
匯編實現多字節乘除法
![匯編實現多字節<b class='flag-5'>乘除法</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論