Что делает>>, означают в PHP?

Рассмотрите:

echo 50 >> 4;

Вывод:

3

Почему это производит 3?

15
задан Peter Mortensen 28 December 2015 в 15:44
поделиться

7 ответов

50 в двоичном формате это 11 0010 , сдвиг вправо на 4 дает 11 , что является равно 3.

См. документацию PHP и Википедию .

32
ответ дан 30 November 2019 в 23:59
поделиться

>> - это двоичный оператор сдвига вправо.

Ваш оператор сдвигает биты в числовом значении 50 на четыре позиции вправо. Поскольку все целые числа представлены в дополнении до двух , это равно 3. Легкий способ запомнить это: один сдвиг вправо равен делению на 2, а один сдвиг влево - это то же самое, что и умножение на 2.

3
ответ дан 30 November 2019 в 23:59
поделиться
3
ответ дан 30 November 2019 в 23:59
поделиться

Как описано на php.org , оператор >> является оператором побитового сдвига, который сдвигает биты вправо:

$ a >> $ b - сдвиг биты $ a $ b шагов вправо (каждый шаг означает «деление на два»)

50 в двоичном формате составляет 110010 , а оператор >> сдвигает эти биты 4 места в вашем примере кода. Хотя это происходит за одну операцию, вы можете представить себе несколько шагов, например:

  • Шаг 1 - 00011001
  • Шаг 2 - 00001100
  • Шаг 3 - 00000110
  • Шаг 4 - 00000011

Поскольку двоичный 11 равен 3 в десятичном виде, код выводит 3.

{{ 1}}
20
ответ дан 30 November 2019 в 23:59
поделиться

It's called a right shift. 'Биты левого операнда сдвигаются вправо на количество позиций правого операнда. Освободившиеся слева битовые позиции заполняются знаковым битом, а биты, сдвинутые вправо, отбрасываются."

Информацию об этом можно найти здесь: http://php.comsci.us/etymology/operator/rightshift.php

1
ответ дан 30 November 2019 в 23:59
поделиться

Сдвигает биты вниз на четыре позиции.

50 в двоичном формате - это 110010.

Сдвинутое на четыре места вниз равно 11, то есть 3.

1
ответ дан 30 November 2019 в 23:59
поделиться

Оператор >> называется оператором двоичного сдвига вправо .

Сдвиг битов вправо 4 раза аналогичен делению на два, четыре раза подряд. Результатом в этом случае будет 3,125 . Поскольку 50 - это целое число, сдвиг битов вернет нижний предел этого значения, равный 3 .

Другими словами, 50 - это 0b110010 в двоичном формате. Сдвигая в 4 раза, мы получаем 0b11 , что равно 3 в десятичной системе.

3
ответ дан 30 November 2019 в 23:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: