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..

Task: 

screen-shot-2017-01-05-at-12-44-33-pm

Solution(s) in Ruby: 

screen-shot-2017-01-05-at-12-43-57-pm

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"

Read more here.

Advertisements
Hackerrank Day 29: Bitwise AND

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s