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

Матеріал з Вікі ЦДУ
Версія від 20:04, 13 квітня 2010; Гупалов Антон (обговореннявнесок)

(різн.) ← Попередня версія • Поточна версія (різн.) • Новіша версія → (різн.)
Перейти до: навігація, пошук

Побітові операції призначені для роботи (установки / зняття / перевірки) груп бітів в цілій змінній. Біти цілого числа - це не що інше, як окремі розряди того ж самого числа, записаного в двійковій системі числення.Наприклад, у двійковій системі число 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-х бит.

<a style="font-size:4px"> </a>