其實位運算還是四則運算,取決於兩點:
1.是否有位運算功能需要
2.是否真的非常在乎效率;
先說第一點,這無可厚非,畢竟有功能需要,比如我有一組flag,需要以位元位形式賦值和檢測,或者尤其是對硬體寫驅動時,某個輸入值的某一位可能控制著某個開關或功能啟動與否。
再說第二點,這種情況的一種例子就是:
a *= 2 和 a <<= 1
兩者的效果是一樣的。
這裡其實我們主要權衡的是程式碼可讀性(或者說可維護性)和程式碼執行效率。
首先,考慮可讀性,很顯然,在邏輯複雜的程式碼中用位移操作不如乘法你那麼顯而易見。
其次是執行效率。現在很多指令碼語言確實都支援位運算,但是指令碼語言本身也是一邊解釋一邊執行,且指令碼語言中的元素(如變數、函式等)都被封裝了很多層,因此執行位運算的那點指令執行效率提升對於指令碼語言執行時的開銷來說九牛一毛,幾乎看不到提升效果,如果真的在意效能,那也不會選擇用指令碼語言。
而對於編譯型語言,我這裡特指C/C++,如果軟體不是很在意效能,那建議還是用四則運算吧,這樣便於開發人員後期維護程式碼。
其實位運算還是四則運算,取決於兩點:
1.是否有位運算功能需要
2.是否真的非常在乎效率;
先說第一點,這無可厚非,畢竟有功能需要,比如我有一組flag,需要以位元位形式賦值和檢測,或者尤其是對硬體寫驅動時,某個輸入值的某一位可能控制著某個開關或功能啟動與否。
再說第二點,這種情況的一種例子就是:
a *= 2 和 a <<= 1
兩者的效果是一樣的。
這裡其實我們主要權衡的是程式碼可讀性(或者說可維護性)和程式碼執行效率。
首先,考慮可讀性,很顯然,在邏輯複雜的程式碼中用位移操作不如乘法你那麼顯而易見。
其次是執行效率。現在很多指令碼語言確實都支援位運算,但是指令碼語言本身也是一邊解釋一邊執行,且指令碼語言中的元素(如變數、函式等)都被封裝了很多層,因此執行位運算的那點指令執行效率提升對於指令碼語言執行時的開銷來說九牛一毛,幾乎看不到提升效果,如果真的在意效能,那也不會選擇用指令碼語言。
而對於編譯型語言,我這裡特指C/C++,如果軟體不是很在意效能,那建議還是用四則運算吧,這樣便於開發人員後期維護程式碼。