2013-01-23 6 views
13

Ich verstehe dieses ganze Bitmask-Konzept nicht ganz.Wie überprüfe ich, ob Bitmaske Bit enthält?

Lassen Sie uns sagen, ich habe eine Maske:

var bitMask = 8 | 524288; 

ich undestand, dass dies, wie ich 8 und 524288 kombinieren würde, und 524296 bekommen.

ABER, wie gehe ich in die andere Richtung? Wie überprüfe ich meine Bitmaske, um zu sehen, ob sie 8 und/oder 524288 enthält?

Um es ein wenig komplexer, lassen Sie uns die Bitmaske sagen, ich habe ist 18358536 und ich muss überprüfen, ob 8 und 524288 in diesem bitmask sind. Wie um alles in der Welt würde ich das tun?

Antwort

23

gut

if (8 & bitmask == 8) { 
} 

wird überprüfen, ob die Bitmaske 8.

komplexer

int mask = 8 | 12345; 
if (mask & bitmask == mask) { 
    //true if, and only if, bitmask contains 8 | 12345 
} 

if (mask & bitmask != 0) { 
    //true if bitmask contains 8 or 12345 or (8 | 12345) 
} 

von Enum enthält interessiert sein und insbesondere FlagsAttibute.

+0

Alternativ 'if ((Maske & bitmask) = 0!)'. Wenn Sie das ein bisschen klarer finden _ (vielleicht wegen der vielen Male, die ich über die Jahre '! = Null 'eingegeben habe) _. –

5

Ich bin ziemlich sicher (A & B)==B wo A ist die Bitmaske und B ist was auch immer Sie überprüfen möchten, sollte tun.

Beispiel:

if((18358536 & 8) == 8) 
{ 
    // mask contains 8 
}