C語言高效程式設計的四大祕技之使用位操作,減少除法和取模的運算

無名_四葉草發表於2020-04-05

轉自:http://tech.163.com/06/1201/10/318HH45C00091KVA_2.html

第3招:使用位操作,減少除法和取模的運算

在計算機程式中,資料的位是可以操作的最小資料單位,理論上可以用“位運算”來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做資料變換使用,但是,靈活的位操作可以有效地提高程式執行的效率。舉例如下:

方法G

int I,J;
I = 257 /8;
J = 456 % 32;

方法H

int I,J;
I = 257 >>3;
J = 456 - (456 >> 4 << 4);

在字面上好像H比G麻煩了好多,但是,仔細檢視產生的彙編程式碼就會明白,方法G呼叫了基本的取模函式和除法函式,既有函式呼叫,還有很多彙編程式碼和暫存器參與運算;而方法H則僅僅是幾句相關的彙編,程式碼更簡潔,效率更高。當然,由於編譯器的不同,可能效率的差距不大,但是,以我目前遇到的MS C ,ARM C 來看,效率的差距還是不小。相關彙編程式碼就不在這裡列舉了。

運用這招需要注意的是,因為CPU的不同而產生的問題。比如說,在PC上用這招編寫的程式,並在PC上除錯通過,在移植到一個16位機平臺上的時候,可能會產生程式碼隱患。所以只有在一定技術進階的基礎下才可以使用這招。


相關文章