Рассматривать:
echo 50 >> 4; 
Вывод:
 3 
Почему он выводит 3?
  50 в двоичном формате 11 0010 , сдвиг вправо на 4 выхода 11 который равен 3. 
См. Документацию по PHP и Википедию .
  Как указано на php.org , оператор >> оператор побитового сдвига, который сдвигает биты вправо: 
$ a >> $ b – Сдвинуть биты шагов $ a $ b вправо (каждый шаг означает «делить на два»)
  50 в двоичном формате – 110010 , а оператор >> сдвигает эти биты на 4 места в вашем примере кода.  Хотя это происходит в одной операции, вы можете подумать об этом несколькими способами: 
00011001 00001100 00000110 00000011   Поскольку двоичный код 11 равен 3 в десятичном значении, код выводит 3. 
Арифметический сдвиг вправо.
  Оператор >> называется двоичным оператором правого сдвига . 
  Смещение битов вправо 4 раза совпадает с делением на два, четыре раза подряд.  В результате в этом случае будет 3.125 .  Поскольку 50 – это int, смещение бита вернет пол этого, что равно 3 . 
  Иными словами, 50 – это 0b110010 в двоичном формате.  Сдвинутый 4 раза, мы имеем 0b11 , что равно 3 в десятичном 0b11 . 
>> является двоичным оператором с правым сдвигом.
Ваш оператор сдвигает биты в числовом значении 50 в четырех местах справа. Поскольку все целые числа представлены в двух дополнениях , это равно 3. Легкий способ запомнить это состоит в том, что один сдвиг вправо совпадает с делением на 2, а один сдвиг влево совпадает с умножением на 2.
Это называется сдвигом вправо. «Биты левого операнда сдвинуты вправо на количество позиций правого операнда. Позиции бит, оставшиеся слева, заполняются знаковым битом, а биты, сдвинутые справа, отбрасываются. '
Информацию можно найти здесь: http://php.comsci.us/etymology/operator/rightshift.php
Он сдвигает бит вниз на четыре места.
50 в двоичном формате – 110010.
Сдвинуто четыре места – 11, что равно 3.