Странное поведение печати в PHP?

Почему следующий код выводит 128?

<?php 
    print 4 << 5; 
?>

person yogeshK    schedule 15.03.2012    source источник
comment
php.net/manual/en/language.operators.bitwise.php   -  person Pekka    schedule 15.03.2012
comment
См. руководство по побитовым операторам: php.net/manual/en/language. operator.bitwise.php   -  person ghkaren    schedule 15.03.2012


Ответы (2)


Потому что это побитовый оператор. Я думаю, что это означает, что 4 умножается на 2 ^ 5, потому что этот оператор означает

Сдвинуть биты шагов $a $b влево (каждый шаг означает «умножить на два»)

так что это пять шагов. Это 4 * 2 * 2 * 2 * 2 * 2 (но я предполагаю, что все происходит на битовом уровне).

person Nicola Peluchetti    schedule 15.03.2012
comment
Спасибо, Никола. Хорошее объяснение. - person yogeshK; 15.03.2012

См. Побитовые операторы :

Нам нужно найти 4 ‹‹ 5. Это означает сдвиг битов 4 5 раз влево:

4 is 00000000000000000000000000000100
4 << 5 after shifting is 00000000000000000000000010000000
00000000000000000000000010000000 is 2^7 = 2*2*2*2*2*2*2 = 128
person Mithun Satheesh    schedule 15.03.2012
comment
+1 за пример. Напоминает мне, что я должен узнать, как на самом деле работают побитовые операторы. :) - person Amal Murali; 18.11.2013
comment
@AmalMurali, спасибо, брат. :) - person Mithun Satheesh; 18.11.2013