用移位來解決乘除法問題
a=a*4;
b=b/4;
可以改為:
a=a< 2;
b=b >>2;
通常如果需要乘以或除以2的n次方,都可以用移位的方法代替。用移位的方法得到代碼比調(diào)用乘除法子程序生成的代碼效率高。實(shí)際上,只要是乘以或除以一個(gè)整數(shù),均可以想辦法用移位的方法得到結(jié)果,如:
a=a*9
可以改為:
a=(a< 3)+a
采用運(yùn)算量更小的表達(dá)式替換原來的表達(dá)式,下面是一個(gè)經(jīng)典例子:
原代碼:
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ùn)算快*/
y = x * x; /* 乘法比平方運(yùn)算快*/
z = (y < < 5) + y; /* 位移乘法比乘法快 */
for (i = h = 0; i < MAX; i++)
{
h += 14; /* 加法比乘法快 */
printf("%d",h);
}
如此,對比一下執(zhí)行時(shí)間會快很多。
學(xué)會避免不必要的整數(shù)除法
整數(shù)除法是整數(shù)運(yùn)算中最慢的,所以應(yīng)該盡可能避免。一種可能減少整數(shù)除法的地方是連除,這里除法可以由乘法代替。這個(gè)替換的副作用是有可能在算乘積時(shí)會溢出或者丟失精度,所以只能在一定范圍的除法中使用。
舉個(gè)例子,不好的代碼:
int i, j, k, m;
m = i / j / k;
推薦的代碼: 注意精度
int i, j, k, m;
m = i / (j * k);
-
C語言
+關(guān)注
關(guān)注
180文章
7631瀏覽量
141423 -
代碼
+關(guān)注
關(guān)注
30文章
4898瀏覽量
70586
發(fā)布評論請先 登錄
乘除法運(yùn)算
單片機(jī)C語言易錯(cuò)知識點(diǎn),記住它們會讓你事半功倍
C語言編程容易混淆的幾個(gè)問題總結(jié)
單片機(jī)C語言易錯(cuò)
C語言編程容易混淆的幾個(gè)問題總結(jié)
請問單片機(jī)C語言容易出錯(cuò)是為什么?怎么解決?
淺析嵌入式C語言里的除法與移位
整數(shù)乘除法與位運(yùn)算的效率對比分析哪個(gè)好
關(guān)于如何提高C語言程序的執(zhí)行效率
匯編實(shí)現(xiàn)多字節(jié)乘除法

評論