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