Consider:
echo 50 >> 4;
Output:
3
Why does it output 3?
The >>
operator is called a binary right shift operator.
Shifting bits to the right 4 times is the same as dividing by two, four times in a row. The result, in this case would be 3.125
. Since 50 is an int, bit shifting will return the floor of this, which is 3
.
Put another way, 50
is 0b110010
in binary. Shifted 4 times we have 0b11
, which is 3
in decimal.
For your convenience, one of the fastest ways to calculate the outputted value from a bitwise shift is to multiply or divide by 2.
For example echo 50 >> 4;
Given that this is a bitwise right, it literally means that the value will be decrease, then we can get the output by divide 50 for 2 and 4 times.
echo 50 >> 4;
// 50/(2*2*2*2) ~ 3.
Given that (from) 48 -> (to) 63/16(2*2*2*2), the result will be more than 2 and less than 4. Then
echo 48 >> 4;
// 48/(2*2*2*2) ~ 3.
echo 63 >> 4;
// 63/(2*2*2*2) ~ 3.
However, when bitwise left, the result will be totally different as it multiplies by 2 with n times:
If echo 50 << 4;
// 50*(2*2*2*2) ~ 800
If echo 51 << 4;
// 51*(2*2*2*2) ~ 816
Live example: https://3v4l.org/1hbJe