Операторы


Побитовые операторы

Оператор Знак Синтаксис Дополнительная информация
bitwise AND & $b1 & $b2 bit AND $b1 and $b2
bitwise OR | $b1 | $b2 bit OR $b1 and $b2
complement ~ ~$b1 invert $b1 (0 to 1, 1 to 0)
bitwise XOR ^ $b1 ^ $b2 bit XOR $b1 and $b2
left shift << $b1 << 8 8 digits left shift $b1
right shift >> $b1 >> 8 8 digits right shift $b1
<?php
    $b1 = 0x11;                // 0001 0001
    echo "$b1\r\n";
    $b2 = 0x23;                // 0010 0011
    echo "$b2\r\n";
    $b3 = $b1 & $b2;           // 0000 0001, bit AND
    echo "$b3\r\n";
    $b3 = $b1 | $b2;           // 0011 0011, bit OR
    echo "$b3\r\n";
    $b3 = ~$b1;                // 1110 1110, NOT
    echo "$b3\r\n";
    $b3 = $b1 << 1;            // 0010 0010, left shift 1 digit > double
    echo "$b3\r\n";
    $b3 = $b1 >> 1;            // 0000 1000, right shift 1 digit > half
    echo "$b3\r\n";
?>
[result]  
17
35
1
51
-18
34
8
  • Сдвиг влево: Биты, добавленные левой операцией, всегда 0.
<?php
    $b1 = 0xFFFFFFFFFFFFFFFF;  // -1
    $b2 = $b1 << 1;            // 0xFFFFFFFFFFFFFFFE (added bit is 0)
    echo "$b2";
?>
[result]  
-2
  • Сдвиг вправо: Биты по сдвигу правой операции всегда одинаковы со знаковым битом.
<?php
    $b1 = 0xFFFFFFFFFFFFFFFF;  // -1
    $b2 = $b1 >> 1;            // 0xFFFFFFFFFFFFFFFF (added bit is 1)
    echo "$b2";
?>
[result]  
-1