#982 – An Enum Type Can Store a Maximum of 32 Flags
November 26, 2013 3 Comments
When you store a boolean value in a bool type, each boolean value uses 1 byte, or 8 bits–the size of a bool instance.
You can be more efficient in storing boolean values by using each bit within a chunk of memory to represent a single boolean value. You can do this quite easily by using an enum type to store a series of flags. In the example below, a single value of type Talents can represent unique values for up to 8 different boolean values.
[Flags] public enum Talents { Singing = 1, Dancing = 2, Juggling = 4, JokeTelling = 8, DoingMagic = 16, RollingTongue = 32, StiltWalking = 64, DoingSplits = 128 };
You can set various bits using the bitwise OR operator.
Talents myTalents = Talents.JokeTelling | Talents.Juggling | Talents.StiltWalking; // 76 = 8 + 4 + 64 int asInt = (int)myTalents;
Note that you can store a maximum of 32 different flags in an enumerated type, because an enum type uses 4 bytes (32 bits) of storage.
Surely how many items in a Flags enum depends on the underlying type? If you declare an enum using a long, you can go up to 64 items?
Surely this depends on the underlying type of the enum? You can declare an enum using any integral type, though the default is Int32 (integer in C#). That is, if you use a long, you can have up to 64 items on a Flags enum.
Yes, you can gain some wiggle room by declaring the enum as a long. BitArray also useful.