Last problem of the 30 days of code challenge!

Sadly, I do not understand Bitwise at all. This is a definite must-review..

**Task: **

**Solution(s) in Ruby: **

**Ruby’s bitwise operators: **

Bitwise operator works on bits and perform bit by bit operation.

**Example:** Assume if a = 60; and b = 13; now in binary format they will be as follows:

a = 0011 1100

b = 0000 1101

—————

**a&b** = 0000 1100

**a|b** = 0011 1101

**a^b** = 0011 0001

**~a ** = 1100 0011

Operator | Description | Example |
---|---|---|

& | Binary AND Operator copies a bit to the result if it exists in both operands. | (a & b) will give 12, which is 0000 1100 |

| | Binary OR Operator copies a bit if it exists in either operand. | (a | b) will give 61, which is 0011 1101 |

^ | Binary XOR Operator copies the bit if it is set in one operand but not both. | (a ^ b) will give 49, which is 0011 0001 |

~ | Binary Ones Complement Operator is unary and has the effect of ‘flipping’ bits. | (~a ) will give -61, which is 1100 0011 in 2’s complement form due to a signed binary number. |

<< | Binary Left Shift Operator. The left operands value is moved left by the number of bits specified by the right operand. | a << 2 will give 240, which is 1111 0000 |

>> | Binary Right Shift Operator. The left operands value is moved right by the number of bits specified by the right operand. | a >> 2 will give 15, which is 0000 1111 |

## the bitwise AND operator

the bitwise and operator walks through the binary representation of two integers bit by bit. If the bits at the same position in both integers are `1`

the resulting integer will have the corresponding bit set to `1`

. If not, the bit will be set to `0`

.

```
(a = 18).to_s(2) #=> "10010"
(b = 20).to_s(2) #=> "10100"
(a & b).to_s(2) #=> "10000"
```

## the bitwise OR operator

the bitwise or operator works the same as the bitwise and operator with the exception that it will set the bit in the resulting integer to `1`

as long as *at least*one of the corresponding bits in the given integers is `1`

:

```
(a = 18).to_s(2) #=> "10010"
(b = 20).to_s(2) #=> "10100"
(a | b).to_s(2) #=> "10110"
```

Read more here.