簡體   English   中英

C,乘法,位操作或*

[英]C, Multiplication, Bit operation or *

我必須做很多乘法運算。 如果我考慮效率,那么我應該使用位操作而不是常規*操作嗎? 如果位操作有差異怎么辦? 提前致謝..

不,您應該使用乘法運算符,讓優化編譯器決定如何最快地完成它。

您會發現編譯器知道如何針對它所針對的任何平台做到最好。 更重要的是,如果你開始編寫位移操作而不是乘法或除法,你的代碼將很快變得不可維護。

優先考慮代碼優化的可讀性,讓編譯器為您完成。

不要嘗試使用二進制文件聰明,因為:

  • 反正它可能不會更快
  • 如果你不知道如何實際操作,你就更容易搞砸了

不,有兩大原因:

  1. 您的硬件可能內置了對乘法的支持。 這種內置支持可能比您在軟件中實現的任何內容都要快得多。 即使沒有硬件支持,編譯器也可能有一個經過深思熟慮且保證可以正常工作的預定義算法。
  2. 除非你非常善於使用按位邏輯和乘法算法,否則你很可能會犯錯誤,更不用說要花費大量時間來正確實現它。

只有少數情況我可以想到你甚至可能開始考慮自定義解決方案:

  1. 您正在實現自己的數字表示原理圖(非常罕見,但我已經看過它,特別是遺留代碼)
  2. 您正在實施“大數字”數據類型。 然而,再次這很難做得很好,找到一個已經實現的庫更好。
  3. 您使用按位移位進行簡單的乘法2 ^ n,但應謹慎使用(我通常只在提高可讀性時才這樣做,而不是為了提高速度)

位操作只能用於使用<<運算符(按位移位)乘以2的冪的數字

我記得還有其他方法來改進乘法,例如預先計算產品和存儲在矩陣中,但所有這些都取決於您在應用程序中的要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM