Відмінності між версіями «Побітові оператори PHP»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
 
(не показана одна проміжна версія ще одного учасника)
Рядок 28: Рядок 28:
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
     <TR bgcolor="#FFFFFF" class="mtx4">
 
       <TD>$a &amp; $b</TD>
 
       <TD>$a &amp; $b</TD>
       <TD>Побітове 'и'</TD>
+
       <TD>Побітове 'і'</TD>
       <TD>Встановлюються тільки ті біти, які встановлені і в $a, и в $b.</TD>
+
       <TD>Встановлюються тільки ті біти, які встановлені і в $a, і в $b.</TD>
 
     </TR>
 
     </TR>
  
Рядок 52: Рядок 52:
 
       <TD>$a &lt;&lt; $b</TD>
 
       <TD>$a &lt;&lt; $b</TD>
 
       <TD>Зрушення вліво</TD>
 
       <TD>Зрушення вліво</TD>
       <TD>Всі біти змінної $a сдвігаються на $b позицій вліво (кожна позиція має на увазі 'множення на 2') </TD>
+
       <TD>Всі біти змінної $a зміщюються на $b позицій вліво (кожна позиція має на увазі 'множення на 2') </TD>
 
     </TR>
 
     </TR>
  
Рядок 58: Рядок 58:
 
       <TD>$a &gt;&gt; $b</TD>
 
       <TD>$a &gt;&gt; $b</TD>
 
       <TD>Зрушення вправо</TD>
 
       <TD>Зрушення вправо</TD>
       <TD>Всі біти змінної $a сдвігаються на $b позицій вправо (кожна позиція має на увазі 'ділення на 2') </TD>
+
       <TD>Всі біти змінної $a зміщюються на $b позицій вправо (кожна позиція має на увазі 'ділення на 2') </TD>
 
     </TR>
 
     </TR>
  
Рядок 67: Рядок 67:
  
 
'''Приклад:'''
 
'''Приклад:'''
<p><CODE><SPAN style="COLOR: #000000"><SPAN  
+
<CODE><SPAN style="COLOR: #000000"><SPAN  
style="COLOR: #0000bb">&lt;?php<BR>
+
style="COLOR: #0000bb">&lt;?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">// Выведет '5'<BR>
+
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">// Отобразит симовол возврата каретки (ascii 8)<BR>
+
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">"hallo" </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: #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">?&gt;</SPAN></SPAN></CODE></p>
+
style="COLOR: #0000bb">?&gt;</SPAN></SPAN></CODE>
  
 
<p>'''Примітка:''' ''Не використовуйте зрушення вправо більш ніж на 32 біта на тридцятидвухразрядних системах. Не використовуйте зрушення вправо для отримання чисел, що вимагають для запису більше 32-х біт.''</p>
 
<p>'''Примітка:''' ''Не використовуйте зрушення вправо більш ніж на 32 біта на тридцятидвухразрядних системах. Не використовуйте зрушення вправо для отримання чисел, що вимагають для запису більше 32-х біт.''</p>
  
 
[[Оператори мови PHP]]
 
[[Оператори мови PHP]]

Поточна версія на 08:13, 7 травня 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-х біт.

Оператори мови PHP