C言語でシフト演算子を使用した乗算と除算は実際に高速ですか? 質問する

C言語でシフト演算子を使用した乗算と除算は実際に高速ですか? 質問する

乗算と除算はビット演算子を使用して実行できます。たとえば、

i*2 = i<<1
i*3 = (i<<1) + i;
i*10 = (i<<3) + (i<<1)

等々。

(i<<3)+(i<<1)実際に、直接使用するよりも 10 を掛ける方が速いのでしょうかi*10? この方法で掛け算や割り算ができない入力はあるのでしょうか?

ベストアンサー1

短い答え: おそらくそうではない。

長い答え: コンパイラには、ターゲット プロセッサ アーキテクチャが実行できる最速の乗算方法を知っている最適化プログラムが組み込まれています。最善の方法は、コンパイラに意図を明確に伝え (つまり、i << 1 ではなく i*2)、最速のアセンブリ/マシン コード シーケンスを決定させることです。プロセッサ自体が乗算命令をマイクロコード内のシフトと加算のシーケンスとして実装している可能性もあります。

結論として、これについて心配して多くの時間を費やさないでください。シフトするつもりならシフトしてください。増やすつもりなら増やしてください。意味的に最も明確なことをしてください。そうすれば、同僚は後であなたに感謝するでしょう。または、そうでなければ、後であなたを呪う可能性が高いです。

おすすめ記事