Search code examples
c#bit-manipulationenum-flags

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!


Solution

  • 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