免責事項/警告:
これはマイクロ最適化であり、ユーザーが測定できる方法でプログラムの効率に影響を与えることはありません。すべてのコンパイラの最適化をオフにして、優れたプロファイラーを実行すると、効果を定量化できる場合がありますが、ユーザーは気付くことはありません。
これは、問題のコードが数秒ごとにしか実行されない状況に特に当てはまります。プロファイリングに費やす時間は、アプリケーションの他の部分の改善に費やすほうがよいでしょう。
また、これらの状況では、ボトルネックのないマイクロ最適化よりも読みやすさが常に優先される必要があります(ただし、以下の私の回答では、要求に応じてランタイム効率のみが考慮されます)。したがって、この状況で使用することをお勧めするコードは です。これはx=true
、最も読みやすく理解しやすいためです。
最後に、チェックを追加すると速度が向上する場合、コンパイラはおそらくそれを既に認識しており、実行してくれるので、失敗することはありませんx=true
(そのため、プロファイラーを実行する前に最適化をオフにする必要があります)。
答え:
これを理解する唯一の真の方法は、プロファイリングです。0 テスト (x==false) は基本的にまったく時間がかからないことがわかるかもしれません。したがって、x が true であることが判明したときに時間を節約できるため、含める価値があります。または、x が false であることが判明したときに、テストに時間がかかりすぎて時間を無駄にしている場合があります。
私の推測では、テストは不要です。これは、0 テストやその他のビット演算 (and、or など) がすべて非常に高速であるため、通常は基本的に同じ時間かかるものとして扱っているためです。また、0-テストに OR 操作 (true に設定) と同じ時間がかかる場合、0-テストは冗長な時間の無駄です。もちろん、プロファイリングは私が間違っていることを証明する可能性があり、私の推測はビット単位の操作に関する大まかな仮定に基づいているため、プロファイラーを実行してこれを理解することを選択した場合、私は間違いなく結果に興味があります.