# Flags beginner to intermediate: Part-2

If you haven’t read part-1 here’s the link.

Now in the last part I showed how integers can be used to make a state machine that holds multiple flags. But we should make a simplified way to interact with it. We don’t really want to memorize each value for the combinations. We at best want to know the values of the normal states.

Here’s the state’s from previous article so that you don’t need to jump around for references.

0= nothing* [standard practice]*

2⁰=1= length

2¹=2=upper

3= length, upper

2²=4=lower

5=length, lower

6=upper, lower

7=length, upper, lower

2³=8=numeric

9=length, numeric

10=upper, numeric

11=lower, numeric

12=length, upper, lower

13= upper, lower, numeric

14= length, upper, numeric

15= length, upper, lower, numeric

**The base flags are**

*Nothing=0,Length=1,Upper=2,Lower=4,Numeric=8*

That’s all we might want to remember. We want the system to handle the rest.

I wonder if you all remember bitwise operator. If not please go and google it. We will be using OR, And, NOT operators here. First I’ll breakdown the integers into 4 bit binary format.

0=0000

1=0001

2=0010

4=0100

8=1000

Adding Flag

Now if you remember what OR operator does then, Lets do this operation 1|2*[1 or 2]*

=0001|0010

=0011=3=Length,Upper*[Check the table from above]*

So it seems like if we OR two flags we get the value of it’s combination

if you or all 4 of them.

1|2|4|8=15= length, upper, lower, numeric

lets try 2|4=0010|0100=0110=6=upper,lower.

So I guess that’s enough proof that the system works.

Detecting flag

Lets see what happens if we use and operator in the mixture.

lets take 6 which has upper and lower. if we try using and with upper and lower we would get that specific bit.

0110 & 0010 = 0010 = 2 = upper.

So if you wish to check if your state machine has specific state all you gotta do is And with your desired state and check if that state is the output.

What if you wish to remove a flag?

In case of removal we need to and with the states not form.

for example if we wish to remove upper flag from 6=upper,lower what we would do is and with not 2(!2).

6 & !2=0110 & 1101 = 0100=4=Lower.

Cool so how do I put this in code?

First lets make a class and wrap it up with a few functions.

This is a C# Code. You can use this class for a series of 32 flags.

But I still don’t wanna memorize numbers

Hmm using this directly will still be sort of stupid for production ready application. What we need to do is wrap this with enum. For that, Stay tuned for the next part.