私は「セット」/「クリア」が好きですが、フレージングの曖昧さに注意してください。フィリップが指摘する、「セットブール変数は、」変数に何らかの値を書き込むことを意味すると解釈することができます。しかし、「フラグの設定」はより明確です。
関連用語:0 /非ゼロの整数を0/1の値に変換することを「ブール化」と呼びますます。
実際に0/1の値を整数として使用する場合(true / falseではなく) bool
使用する場合、その単語を使用することができます。そうでなければ、コンパイラが実行しなければならない操作のコストについて話している場合にのみ、おそらく出てくるでしょう。(または、SIMDを使用して手動でベクトル化して比較し、各ベクトル要素にすべてゼロ/すべて1のビットを生成する場合)。
CおよびC ++では、a bool
は暗黙的に0または1の整数に変換し戻すことができ、通常の実装bool
では、0または1(ゼロ以外の値だけでなく)の1バイト値として格納されます。これにより効率的a && b
ですが、実際には多くのCコンパイラが最適化を逃しました。
bool booleanize(int a) { return a; } // C++
この関数はret
、ほとんどのアーキテクチャで複数の命令(を含まない)にコンパイルされます。(MIPSは興味深い例外であり、個別のフラグ/条件コードレジスタの代わりにレジスタ内比較命令を使用しています)。 x86-64、MIPS、およびARM thumbのGodboltコンパイラエクスプローラーでは、x86-64バージョンは次のように表示されます。
test edi, edi # set flags according to a & a
setne al
ret # return value in AL, the low byte of RAX
申し訳ありませんが、このブール化の例は少し大きくなっています。