速度に関しては、これは少なくとも選択肢2と同じくらい速いでしょう。
bSize = 128 << (choice == 'y' || choice == 'Y');
それが選択肢1よりも速いかどうかは、私にはすぐにはわかりません。ただし、未知のプラットフォームでのパフォーマンスを調整するには、選択肢2で提案されたバリアントが好きだと思います。その理由は、ハードウェアレベルでは、選択肢2(元のまたはバリアント)はプログラムカウンターのリロードを伴わず、比較的少数のトランジスタを含む、比較的単純なシフトレジスタ操作。(実際、それについて本当に技術的に知りたいのであれば、シフトはおそらく多重化によって達成されることを理解する ことができます。詳細には、現在の形式には多すぎますが、ポイントは、の出力(choice == 'y' || choice == 'Y')
が効果的にパイプされることですマルチプレクサの制御ラインの1つに直接接続します。とにかく、それは本当に高速です。)
評価された条件を提案された方法で安全に使用できるかどうかについては、ISO / IEC 9899:1999(E)、セクション。6.5.14.3は、これを安全に実行できることを保証します。「||演算子は、そのオペランドのいずれかが0と等しくない場合は、1を返します。それ以外の場合は、0を返します。結果の型はintです。」
(@PaulRは、この回答が提供するような電子理論上の考慮事項が決定的ではないことを正しく観察しています。実際のプラットフォームで実際のコードをプロファイリングして、どちらが速いかを確認する必要があります。これは、@PaulR側の単なる口論でもありません。選択肢2の方が速いと言っても過言ではありませんが、これが速いという意味ではありません。使用しているCPUによっては、分岐予測やその他のハードウェアが選択肢1を促進する可能性があります。また、そうなったとしても、私は非常に驚きません。)