Рассматривать:
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.