Shift operators were always confusing for me. So I thought of revising old lessons like converting numbers to binary, shift operators, etc.. once again.
Converting integer to binary
These are one of the first lessons which I learned when I started learning computing. Even though computers use 32/64 bits for a integer, for ease I am using only 8 bits.
So in 8 bits, we can represent integers from 0
(00000000
) to 255
(11111111
) if they are unsigned. When it comes to signed integers its bit confusing, In 8 bits, we can represent -128
(11111111
) to +127
(01111111
) signed integers.ie., if the 8th bit is 1
its a negative number. In another way, 0-127
are positive and 128-255
are negative.
So how to convert a negative number into binary?
Lets our number be -10
, so the esiest way to find the binary
256 + (-10)
256 - 10 = 246
Converting 246
to binary, gives you 11110110
. which is equalent binary for -10
.
Another way to find the binary of negative numbers is,
- Take the binary of postitive number
- Find 1’s compliment (inverting all 0’s to 1’s and 1’s to 0’s )
- Add 1 to it.
To find -10
’s binary, first we find binary of 10
, which is 00001010
.
10 converted to 00001010
1's compliment of 00001010 is 11110101
Add 1 to it : 11110101 + 1 = 11110110
So here I am gonna address 3 shift operators which revised recently, which are
>>
(Signed right shift)<<
(Signed left shift)>>>
(Unsigned right shift)
>>
(Signed right shift)
On 10 >> 1
, here 10 is converted to binary as 00001010
and shit the bits 1 position to the right. Which results 00000101
equalant of 5 in decimal.
On -10 >> 1
, -10 is converted to binary as 11110110
and when shifts to 1 position to right it becomes 11111011
which is equalant to -5.
<<
(Signed left shift)
On 10 << 1
, here the difference is, it shift the bits 1 posision to its left. which results 00010100
equalant of 20 in decimal. On -10
, in the same way after shift it become 11101100
equalant to -20
>>>
(Unsigned right shift)
On 10 >>> 1
, here the processing of positive integers are same the >>
(right shift) but bit different for the negative numbers.
On -10 >>> 1
, the binary equalant of -10
is 11110110
. now shift 1 postition to right, adding zero’s on left. which results 01111011
converting this to decimal (discarding sign) will result 123
.