Побітові оператори 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 "hello" ^ "hello"; // Виведе наступні ASCII-значення: #0 #4 #0 #0 #0
// 'a' ^ 'e' = #4
?>
Примітка: Не використовуйте зрушення вправо більш ніж на 32 біта на тридцятидвухразрядних системах. Не використовуйте зрушення вправо для отримання чисел, що вимагають для запису більше 32-х біт.