1

を行進、私はこのページに続きますどういう意味ですか?そして、正しい糸杉を見つけるためにエッジテーブルでどのように動作するのでしょうか?キューブ、ビット単位のANDとORキューブのアルゴリズムを行進理解するために

  • if(grid.val [0] < isolevel)cubeindex | = 1;

  • (edgeTable [cubeindex] & 1) vertlist [0] = VertexInterp(isolevel、grid.p [0]、grid.p [1]、grid.val [0]、grid.val [なら1]);

答えて

1

このテキストを長く読んでいるわけではありません。しかし、ここでビット演算子がどのように動作するかを見つけることができますhttps://en.wikipedia.org/wiki/Bitwise_operations_in_C。 `

cubeindex |= 1 --> cubeindex = cubeindex | 1. 
例cubeindexため

= 26(binary 11010)と1(binary 00001)ここでは、広告1 26-> 27

11010 | 00001 = 11011 

。次edgeTable[cubeindex] & 1については

例cubeindex = 17(binary 10001)については

10001 & 00001 = 00001 

これは、if文で使用される1となる。\数edgeTable[cubeindex]ビットが含まれている場合、これはちょうどチェックし00001それに応じて真または偽を返します。

希望はこのことができます:)

乾杯

0

ビット単位&(と)と| (または)整数値内のすべてのビットに対して動作します。これは、各ビットごとに独立して動作し、様々なオブジェクトの状態を示す一連のブール値の真理値(別名フラグ)を持つ場合によく使用されます。また、(あなたの例のように)使用したり、特定のフラグをテストしたり、他のフラグを変更したりすることもできません。

整数のビットは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の値

関連する問題