&&は論理積ですが、| ビット演算子です。
a && b
両方のオペランドがtrueと評価されると、 trueに評価されます。フラグはほとんどの場合1より大きい数値であるため、この式は常にtrueに評価されます。
ビットマスクを受け入れる関数のしくみ
それらは定数を指定します
これらの定数は2の累乗でなければならないことに注意してください。
FLAG_INT1 = 1
FLAG_INT2 = 2
FLAG_INT3 = 4
FLAG_INT4 = 8
いくつかのフラグを組み合わせて関数を呼び出します
myFunction(FLAG_INT1 | FLAG_INT3)
これにより、ビット単位のOR演算が行われます。
0001
OR 0100
=======
0101
オペランドの一方(または両方)のセットビット(1 )も、結果のセットビット( 1)になります。
関数は各フラグを内部的にチェックします
これには、ビットごとのAND演算が必要です。
0101
AND 0001 // check for FLAG_INT1
========
0001 // true
0101
AND 0010 // check for FLAG_INT2
========
0000 // false
0101
AND 0100 // check for FLAG_INT3
========
0100 // true
ビット単位のANDでは、位置Xの結果にセットビット( 1 )を生成するために、両方のオペランドに位置Xにセットビット( 1 )が必要でした。
ウィキペディアには、一般的なビット演算子に関する優れた記事もあります:http: //en.wikipedia.org/wiki/Bitwise_operation