I have four flags
Current = 0x1
Past = 0x2
Future = 0x4
All = 0x7
Say I receive the two flags Past and Future (setFlags(PAST
if ((flags & PAST) == PAST)
{
// PAST is there
}
if ((flags & CURRENT) != CURRENT)
{
// CURRENT is not there
}
I think what is missing is to take "all" but one
[Flags]
public enum Time
{
None = 0,
Current = 1,
Past = 1 << 1, // 2, 10 binary
Future = 1 << 2, // 4, 100 binary
All = Current | Past | Future
}
Then with the above flags enum, you can do
var notNow= Time&~Time.Current;
If you want all bits in the test mask to match:
if((value & mask) == mask) {...}
If you want any single bit in the test mask to match:
if((value & mask) != 0) {...}
The difference is most apparent when you are testing a value for multiple things.
To test for exclusion:
if ((value & mask) == 0) { }