2013-01-23 48 views
13

我不完全理解這個完整的位掩碼概念。如果bitmask包含位,我該如何檢查?

比方說,我有一個面具:

var bitMask = 8 | 524288; 

我已瞭解,這是我怎麼會結合8524288,並獲得524296

但是,我該如何去其他方式?如何檢查我的位掩碼,看它是否包含8和/或524288

爲了讓它更復雜一點,我們假設我的位掩碼是18358536,我需要檢查該位掩碼中是否有8524288。我該怎麼做?

回答

23

以及

if (8 & bitmask == 8) { 
} 

將檢查位掩碼包含8.

更復雜

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

可以通過枚舉並且更具體FlagsAttibute有興趣。

+0

另外'如果((掩模&位掩碼)!= 0)'。如果發現這一點更清楚一點(可能是因爲多年來我多次輸入'!= null')_。 –

5

我很確定(A & B)==B其中A是位掩碼,B是任何你想檢查應該做的。

實施例:

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