2012-10-20 12 views
16

Na przykład. Mam następujący ENUMJak sprawdzić, czy wyliczenie bitowe zawiera wartości z innego wyliczenia bitowego w C#?

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

Tak ustawić mystuff do

mystuff = Stuff.stuff1|Stuff.stuff2; 

następnie ustawić hisstuff do

hisstuff = Stuff.stuff2|Stuff.stuff3; 

Jak mogę teraz sprawdzić, czy te pokrywają -ie hisstuff i mystuff zarówno zawierać co najmniej jedną z tych samych wartości wyliczeniowych?

A także, czy jest na to kilka sposobów, które są najbardziej wydajne? (Jest to w grze)

Odpowiedz

17

prosty:

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

to robi bitowego "i", a następnie testy na każdym skrzyżowaniu.

+0

wielkie dzięki. działa świetnie – coolblue2000

11

celu uzyskania wartości, które są ustawione w obu wartości, należy użyć i (&) Operator:

mystuff & hisstuff 

to daje nową wartość tylko wartości nakładającymi się, w swoim przykładzie tylko Stuff.stuff2. Aby sprawdzić, czy któraś z wartości się pokrywa, należy sprawdzić, czy nie jest ona zerowa:

if ((mystuff & hisstuff) != 0) ... 
Powiązane problemy