# Hackerrank Day 29: Bitwise AND

Last problem of the 30 days of code challenge!

Sadly, I do not understand Bitwise at all. This is a definite must-review.. 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 leastone 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"``````