Відмінності між версіями «Побітові оператори PHP»
Рядок 67: | Рядок 67: | ||
'''Приклад:''' | '''Приклад:''' | ||
− | + | <CODE><SPAN style="COLOR: #000000"><SPAN | |
− | style="COLOR: #0000bb"><?php<BR> | + | style="COLOR: #0000bb"><?php<BR> |
− | </SPAN><SPAN | + | </SPAN><SPAN |
− | style="COLOR: #007700">echo </SPAN><SPAN style="COLOR: #0000bb">12 </SPAN><SPAN | + | style="COLOR: #007700">echo </SPAN><SPAN style="COLOR: #0000bb">12 </SPAN><SPAN |
− | style="COLOR: #007700">^ </SPAN><SPAN style="COLOR: #0000bb">9</SPAN><SPAN | + | style="COLOR: #007700">^ </SPAN><SPAN style="COLOR: #0000bb">9</SPAN><SPAN |
− | style="COLOR: #007700">; </SPAN><SPAN | + | style="COLOR: #007700">; </SPAN><SPAN |
− | style="COLOR: #ff8000">// | + | style="COLOR: #ff8000">// Виведе '5'<BR> |
− | <BR> | + | <BR> |
− | </SPAN><SPAN | + | </SPAN><SPAN |
− | style="COLOR: #007700">echo </SPAN><SPAN | + | style="COLOR: #007700">echo </SPAN><SPAN |
− | style="COLOR: #dd0000">"12" </SPAN><SPAN style="COLOR: #007700">^ </SPAN><SPAN | + | style="COLOR: #dd0000">"12" </SPAN><SPAN style="COLOR: #007700">^ </SPAN><SPAN |
− | style="COLOR: #dd0000">"9"</SPAN><SPAN style="COLOR: #007700">; </SPAN><SPAN | + | style="COLOR: #dd0000">"9"</SPAN><SPAN style="COLOR: #007700">; </SPAN><SPAN |
− | style="COLOR: #ff8000">// | + | style="COLOR: #ff8000">// Покаже символ повернення коретки (ascii 8)<BR> |
− | + | ||
// ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8<BR> | // ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8<BR> | ||
− | <BR> | + | <BR> |
− | </SPAN><SPAN | + | </SPAN><SPAN |
− | style="COLOR: #007700">echo </SPAN><SPAN | + | style="COLOR: #007700">echo </SPAN><SPAN |
− | style="COLOR: #dd0000">" | + | style="COLOR: #dd0000">"hello" </SPAN><SPAN |
− | style="COLOR: #007700">^ </SPAN><SPAN style="COLOR: #dd0000">"hello"</SPAN><SPAN | + | style="COLOR: #007700">^ </SPAN><SPAN style="COLOR: #dd0000">"hello"</SPAN><SPAN |
− | style="COLOR: #007700">; </SPAN><SPAN | + | style="COLOR: #007700">; </SPAN><SPAN |
− | style="COLOR: #ff8000">// Виведе наступні ASCII-значення: #0 #4 #0 #0 #0<BR> | + | style="COLOR: #ff8000">// Виведе наступні ASCII-значення: #0 #4 #0 #0 #0<BR> |
// 'a' ^ 'e' = #4<BR> | // 'a' ^ 'e' = #4<BR> | ||
− | </SPAN><SPAN | + | </SPAN><SPAN |
− | style="COLOR: #0000bb">?></SPAN></SPAN></CODE | + | style="COLOR: #0000bb">?></SPAN></SPAN></CODE> |
<p>'''Примітка:''' ''Не використовуйте зрушення вправо більш ніж на 32 біта на тридцятидвухразрядних системах. Не використовуйте зрушення вправо для отримання чисел, що вимагають для запису більше 32-х біт.''</p> | <p>'''Примітка:''' ''Не використовуйте зрушення вправо більш ніж на 32 біта на тридцятидвухразрядних системах. Не використовуйте зрушення вправо для отримання чисел, що вимагають для запису більше 32-х біт.''</p> | ||
[[Оператори мови PHP]] | [[Оператори мови PHP]] |
Версія за 12:18, 21 квітня 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 "hello" ^ "hello"; // Виведе наступні ASCII-значення: #0 #4 #0 #0 #0
// 'a' ^ 'e' = #4
?>
Примітка: Не використовуйте зрушення вправо більш ніж на 32 біта на тридцятидвухразрядних системах. Не використовуйте зрушення вправо для отримання чисел, що вимагають для запису більше 32-х біт.