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
|&||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
(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
(a = 18).to_s(2) #=> "10010" (b = 20).to_s(2) #=> "10100" (a | b).to_s(2) #=> "10110"
Read more here.