0

C++コマンドでそれは本当ですか

n&1

よりも高速で、メモリ使用量が少ない

n % 2?

(n は int 型)

よりグローバルに、% 演算子を使用するよりも速く 2 を法とする整数の剰余を見つける方法はありますか? 前もって感謝します。

4

1 に答える 1

5

どちらが多かれ少なかれメモリを使用するかは、命令のエンコードに大きく依存しますが、コンパイラが同じものにn & 1最適化されていない場合、何倍も高速になる可能性があります [1] 。n % 2もちろん、多くのコンパイラは実際にこの最適化を行います (または、同じことを行うかもしれませんが、「気にする」必要のない に興味深い影響を与える負の数に対処するコンパイラ) %&

達成したいことによっては、負の数を& 1使用する前に特別な処理が必要になることに注意してください。gettting 1from-1 & 1が問題ない場合、 using&は確かに有効なオプションですが、数学的には少し奇妙です。

また、パフォーマンスを比較するときは常に、独自のベンチマーク測定を行う必要があることにも注意してください [または、特定のプロセッサ モデルに対して特定のコンパイラが生成するものを十分に理解する]。投稿。

[1] 比較として、最新のプロセッサのほとんどは、1 つのクロック サイクルで AND を実行し、多くの場合、そのような操作を複数同時に実行できます。剰余に使用される整数除算は、それほど高速ではありません。たまたま、2012 年 1 月の「ファミリー 15」プロセッサ用の AMD 最適化ガイドを入手しました。答えとして「剰余」を使用する 32 ビットの除算演算には、最大 39 クロック サイクルかかる場合があります。したがって、コンパイラーが AND 命令に最適化しないと仮定すると、もちろんそれが有効な最適化であると仮定すると、使用するのは約 40 ~ 80倍%悪くなります。%&

于 2015-01-26T23:20:39.590 に答える