Many of you might be wondering what is the motive behind the page name! Well, I thought why not throw some light ðŸ”¦ on this ðŸ˜„

Back to Basics: Shall we ?

A **bit **is a single Boolean value (0 or 1), small set(s) of which makes a bit-mask. A bit is said to be** set** if and only if it is '1'. For eg: in 10011, 1st, 2nd and 5th bits are set while 3rd and 4th are not

**.**'Mask' in bit-mask can be understood as a way to hide/show some information.

Let us understand this with an example! Let's say we have a set of 4 characters: {'a', 'b', 'c', 'd'} and we want to represent this using bits.

Here, we will create a mask of 4 bits _, _, _, _ where each position will tell us if we are referring(setting) that value or not.

Therefore, **1011 will represent acd** since we set the bits to 1 for those positions. This is a very powerful technique and we can do many operations using this logic.

Some basic operations allowed are:

AND operator (&) : This operator will give a value of 1 when both the operands are 1. So, 1&1 = 1 but 1&0 = 0

** OR operator (|) : **This operator will give a value of 1 when either of the operands is 1. So, 1|0 = 1 but 0|0 = 0

** XOR operator (^): **This operator will give a value of 1 when both of the operands have different bit or value.

So 1 ^ 0 = 1, 0 ^ 1 = 1 but 0 ^ 0 = 0 and 1 ^ 1 = 0

Let's see these in action:

Question : Swap two number without using third variable

Solution:

```
a = 6 in decimal
= 0110 in binary
b = 4 in decimal
= 0100 in binary
Now we want to swap it.
a = a ^ b
= 0110 ^ 0100
= 0010
= 10 in decimal
b = a ^ b
= 0010 ^ 0100
= 0110
= 6 in decimal
a = a ^ b
= 0010 ^ 0110
= 0100
= 4 in decimal
```

Powerful, isn't it ? ðŸ’ª

Well owning to this powerful property of bit masking, the page is namedBitmaskers!

Let me know your thoughts and if you liked this page! Cheers.