21

例えば。私は次の列挙型を持っています

[Flags]
public enum Stuff
{
   stuff1=1,
   stuff2=2,
   stuff3=4,
   stuff4=8
}

だから私は自分のものをに設定しました

mystuff = Stuff.stuff1|Stuff.stuff2;

それから私は彼のものをに設定しました

hisstuff = Stuff.stuff2|Stuff.stuff3;

これらが重複しているかどうかをテストするにはどうすればよいですか?つまり、hisstuffとmystuffの両方に同じ列挙値が少なくとも1つ含まれているかどうかをテストしますか?

また、それを行うための複数の方法がある場合、最も効率的ですか?(これはゲーム用です)

4

2 に答える 2

24

単純:

if((x & y) != 0) {...}

これはビット単位の「and」を実行してから、交差点をテストします。

于 2012-10-20T12:08:43.357 に答える
11

両方の値に設定されている値を取得するには、and(&)演算子を使用します。

mystuff & hisstuff

これにより、重複する値のみを含む新しい値が得られます(例ではのみ)Stuff.stuff2。値のいずれかが重複していないかどうかを確認するには、値がゼロ以外かどうかを確認します。

if ((mystuff & hisstuff) != 0) ...
于 2012-10-20T12:13:33.617 に答える