次のようなコードに遭遇しました
if (flagsDef)
flagsTainted |= flagsUsed;
使用される演算子の意味を理解するのを手伝ってください。
ステートメント:
flagsTainted |= flagsUsed
は次の省略形です。
flagsTainted = flagsTainted | flagsUsed
バイナリ/ビットごとの OR 演算子を使用します|
。
コードはフラグ変数を操作しています。フラグ変数は、変数にビットを設定することで状態情報を保持していますflagsTainted
。
ビット操作の詳細については、ウィキペディアの記事が非常に優れています。
a op= b
でありa = a op b
、|
はビット単位のor
演算子です (ビット単位とは、各 2 進数に適用されることを意味します)。
の真理値表は次のとおりですor
。
0 1
___
0| 0 1
1| 1 1
|
はビットごとの OR です。これは、or 演算子を使用してビットを比較することを意味します。
例えば:
101
001
2 つの場合|
は 101 になります。= 演算の左側に結果を代入します。
英語では「or equals」と読むことができます。
+= に似ていますが、左の値を右に追加する代わりに、2 つの値のビットごとの OR を実行し、結果を左の変数に代入します。
ビット演算の詳細については、次のリンクを参照してください: ウィキペディア