ビット単位&(と)と| (または)整数値内のすべてのビットに対して動作します。これは、各ビットごとに独立して動作し、様々なオブジェクトの状態を示す一連のブール値の真理値(別名フラグ)を持つ場合によく使用されます。また、(あなたの例のように)使用したり、特定のフラグをテストしたり、他のフラグを変更したりすることもできません。
整数のビットは2つの値の累乗を表します。そのビットがtrueに設定されている場合、その2の累乗がその値に含まれます。そのビットが偽の場合、それは含まれません。最下位ビットb0は2^0を表し、ビット1は2^1などを表します。
例えば、値5 = 101はバイナリで5 = 2^2 + 2^0 = 4 + 1 = 5
ビット単位のOR動作するためのいずれかの場合は1に、結果のビットを設定することによってオペランドにはその位置に1が含まれます。ビット単位のAND演算は、両方のオペランドがその位置に1を持つ場合に限り、各ビットを1に設定することによって行います。例えば
:
これらの演算子を使用して
Bitwise OR: 5 | 9 = 0101 | 1001 = 1101
Bitwise AND: 5 & 9 = 0101 & 1001 = 0001
、cubeindexのビット値のセットは、状態(真または偽の値)のセットを表すならば、あなたがテストするために、同じビット単位のオペランドを使用することができますし、もし特定の状態は真であり、他のビットは無視される。あなたの例では
:
cubeindex |= 1
(1)にかかわらず、それは前にあったものの真にcubeindexで最下位ビットを設定します。これは、任意のビット値0のビットごとの論理和が同じビット値であり、任意のビット値1のビット単位の論理和が常に1であり、前のステートにかかわらずそのビットを1に設定するのと同じであるためです。それは次のものと同等です:
キューブインデックス=キューブインデックス| 000000000000000001 = b0が1に設定されたキューブインデックス。
論理ANDは、edgeTable [cubeindex]の最下位ビットが1に等しいかどうかをテストするために使用されます。他のビットはビット単位でANDされているので問題ありません。これは常にゼロです。
edgeTable [キューブインデックス] & 1 =ビット0の値