Liam Liam - 3 months ago 19
C# Question

Test that only a single bit is set in Flags Enum

So I have a flags Enum

public Enum test
{
test1 = 1,
test2 = 2,
test3 = 4,
etc.
}


How can I test that one bit, and only one bit is set?

I've 100% done this before but my mind is not working this am!

Answer

To check that only a single bit is set in a number, the number must (by definition) be a power of two. As such, you can use the following to test:

int intVal = ((int)myEnumFlags);
bool singleBitIsSet = intVal != 0 && (intVal & (intVal-1)) == 0;

My favorite reference for this kind of thing:

http://aggregate.org/MAGIC