Побітові оператори PHP

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук

Побітові операції призначені для роботи (установки / зняття / перевірки) груп бітів в цілій змінній. Біти цілого числа - це не що інше, як окремі розряди того ж самого числа, записаного в двійковій системі числення.Наприклад, у двійковій системі число 12 буде виглядати як 1100, а 2 - як 10, так що вираз 12|2 поверне нам число 14 (1110 у двійковій запису). Якщо змінна не ціла, то вона спочатку округляється, а вже потім до неї застосовуються перераховані нижче оператори.

Для представлення одного числа використовуються 32 біта:

  • 0000 0000 0000 0000 0000 0000 0000 0000 - це нуль;
  • 0000 0000 0000 0000 0000 0000 0000 0001 - це 1;
  • 0000 0000 0000 0000 0000 0000 0000 0010 - це 2;
  • 0000 0000 0000 0000 0000 0000 0000 0011 - це 3;
  • 0000 0000 0000 0000 0000 0000 0000 0100 - це 4;
  • 0000 0000 0000 0000 0000 0000 0000 0101 - це 5;
  • ...
  • 0000 0000 0000 0000 0000 0000 0000 1111 - это 15;
  • ...

Побітові оператори:

Приклад Назва Результат
$a & $b Побітове 'и' Встановлюються тільки ті біти, які встановлені і в $a, и в $b.
$a | $b Побітове 'або' Встановлюються ті біти, які встановлені або в $a, або в $b.
$a ^ $b Виключне або Встановлюються тільки ті біти, які встановлені або тільки в $a, або тільки в $b
~ $a Заперечення Встановлюються ті біти, які в $a не встановлені, і навпаки.
$a << $b Зрушення вліво Всі біти змінної $a сдвігаються на $b позицій вліво (кожна позиція має на увазі 'множення на 2')
$a >> $b Зрушення вправо Всі біти змінної $a сдвігаються на $b позицій вправо (кожна позиція має на увазі 'ділення на 2')

У разі якщо присутні і лівий, і правий операнди рядка, побітові операції будуть працювати з їх ASCII-уявленнями. Приклад:

<?php
echo 12 ^ 9; // Выведет '5'

echo "12" ^ "9"; // Отобразит симовол возврата каретки (ascii 8)
// ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8

echo "hallo" ^ "hello"; // Виведе наступні ASCII-значення: #0 #4 #0 #0 #0
// 'a' ^ 'e' = #4
?>

Примітка: Не використовуйте зрушення вправо більш ніж на 32 біта на тридцятидвухразрядних системах. Не використовуйте зрушення вправо для отримання чисел, що вимагають для запису більше 32-х біт.