2013-01-23 29 views
13

Nie bardzo rozumiem tę całą koncepcję maski bitowej.Jak sprawdzić, czy bitmask zawiera bit?

Powiedzmy mam maskę:

var bitMask = 8 | 524288; 

I undestand, że jest to w jaki sposób mogę połączyć 8 i 524288 i uzyskać 524296.

ALE, jak przejść w drugą stronę? Jak sprawdzić maskę bitową, aby sprawdzić, czy zawiera ona 8 i/lub 524288?

Aby było nieco bardziej skomplikowane, powiedzmy, że mam maskę bitową to 18358536 i potrzebuję sprawdzić, czy 8 i 524288 są w tej masce bitowej. Jak bym to zrobił?

Odpowiedz

23

dobrze

if (8 & bitmask == 8) { 
} 

sprawdzi, czy maska ​​bitowa zawiera 8.

bardziej złożony

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) 
} 

może być zainteresowany przez wyliczenia i bardziej szczegółowo FlagsAttibute.

+0

Alternatywnie, 'if ((maska ​​i maski bitów) = 0!) '. Jeśli znajdziesz to nieco jaśniej (być może ze względu na to, że przez wiele lat wpisuję '! = Null' przez lata) _. –

5

Jestem całkiem pewna, (A & B)==B gdzie A jest maską bitową i B jest cokolwiek chcesz sprawdzić.

przykład:

if((18358536 & 8) == 8) 
{ 
    // mask contains 8 
} 
Powiązane problemy