Using Bitwise operators on flags
First of all - use enums with FlagAttribute. That's what it's for.
[Flags]
public enum Time
{
None = 0
Current = 1,
Past = 2,
Future = 4
All = 7
}
Testing then is done like this:
if ( (x & Time.Past) != 0 )
Or this:
if ( (x & Time.Past) == Time.Past )
The latter will work better if "Past" was a combination of flags and you wanted to test them all.
Setting is like this:
x |= Time.Past;
Unsetting is like this:
x &= ~Time.Past;
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) { }
You may also want to add an extension method like this
enum states {
Current = 0x1,
Past = 0x2,
Future = 0x4,
All = 0x7
};
static bool Is(this states current, states value) {
return (current & value) == value;
}
then you can do:
if(state.Is(states.Past)) {
// Past
}