Projektowanie stron WWW od podszewki

Kursy mojej produkcji

1.9 Operatory bitowe

Operatory bitowe są dość rzadko spotykane ze względu na ich specyfikę jednak warto je omówić. Operatory te pozwalają na przeprowadzanie operacji logicznych na bitach. W praktyce przydaje się to osobom, które zajmują się np. elektroniką. W PHP praktycznie nie znajdują zastosowania. Operacje logiczne opierają się na prawach algebry Boole'a. Bramki logiczne są najczęściej spotykanym elementem, w którym stosuje się algebrę Boole'a. Jako ciekawostkę powiem, że każdy procesor jest wyposażony w jednostki arytmetyczno-logiczna, które także umożliwiają przeprowadzanie operacji logicznych. Aby dalej nie mieszać poniżej przedstawiam przykłady zastosowania operatorów bitowych. Chce także zwrócić uwagę, że podczas zmiany typu zmiennej z int na bool wartość 0 przybiera postać false oraz wartość 1 przybiera postać true.

Lista operatorów bitowych

  • $a & $b czyli bitowe AND
  • $a | $b czyli bitowe OR
  • !$a czyli bitowe NOT
  • $a ^ $b czyli bitowe XOR
  • $a << $b czyli bitowe przesuniecie bitów w lewo
  • $a >> $b czyli bitowe przesuniecie bitów w prawo

Przykłady zastosowań

Bitowe AND

Kod:
<?php
// Tablica prawdy dla operacji AND

#---+---+---+
# a | b | q |
#---+---+---+
# 0 | 0 | 0 |
# 0 | 1 | 0 |
# 1 | 0 | 0 |
# 1 | 1 | 1 |
#-----------+

$a 1// true
$b 1// true

echo $a $b// Czyli wszystkie argumenty muszą mieć wartość 1 aby wyszła prawda
?>

Bitowe OR

Kod:
<?php
// Tablica prawdy dla operacji OR

#---+---+---+
# a | b | q |
#---+---+---+
# 0 | 0 | 0 |
# 0 | 1 | 1 |
# 1 | 0 | 1 |
# 1 | 1 | 1 |
#-----------+

$a 0// false
$b 1// true

echo $a $b// Czyli wystarczy, że jeden argument przybierze wartość 1 i wychodzi prawda
?>

Bitowe NOT

Kod:
<?php
// Tablica prawdy dla operacji NOT

#---+---+
# a | q |
#---+---+
# 0 | 1 |
# 1 | 0 |
#-------+

$a 0// false

echo !$a;
?>

Bitowe XOR

Kod:
<?php
// Tablica prawdy dla operacji XOR

#---+---+---+
# a | b | q |
#---+---+---+
# 0 | 0 | 0 |
# 0 | 1 | 1 |
# 1 | 0 | 1 |
# 1 | 1 | 0 |
#-----------+

$a 1// true
$b 1// true

echo $a $b;
?>

Bitowe przesunięcie w lewo

Kod:
<?php
$a 1;
$b 10;

// Przesuwany $a w lewo o $b bitów
echo $a << $b// 1024
?>

Bitowe przesunięcie w prawo

Kod:
<?php
$a 1024;
$b 4;

// Przesuwany $a w prawo o $b bitów
echo $a >> $b// 64
?>

Bitowe NOR

Kod:
<?php
// Tablica prawdy dla operacji NOR

#---+---+---+
# a | b | q |
#---+---+---+
# 0 | 0 | 1 |
# 0 | 1 | 0 |
# 1 | 0 | 0 |
# 1 | 1 | 0 |
#-----------+

$a 0// false
$b 0// false

echo !($a $b);
?>

Bitowe NAND

Kod:
<?php
// Tablica prawdy dla operacji NAND

#---+---+---+
# a | b | q |
#---+---+---+
# 0 | 0 | 1 |
# 0 | 1 | 1 |
# 1 | 0 | 1 |
# 1 | 1 | 0 |
#-----------+

$a 0// false
$b 0// false

echo !($a $b);
?>

Bitowe ENOR (XNOR)

Kod:
<?php
// Tablica prawdy dla operacji ENOR (XNOR)

#---+---+---+
# a | b | q |
#---+---+---+
# 0 | 0 | 1 |
# 0 | 1 | 0 |
# 1 | 0 | 0 |
# 1 | 1 | 1 |
#-----------+

$a 0// false
$b 0// false

echo !($a $b);
?>

Inne

Kod:
<?php
$a 0// false
$b 0// false
$c 0// false
$d 1// true

echo $a $b $c $d// Wystarczy, że którakolwiek ze zmiennych przyjmie wartość 1 wtedy na wyjściu będzie 1
?>
Kod:
<?php
$a 1// true

echo (!(!$a)); // Podwójna negacja
?>
Zapewne zauważyliście podczas eksperymentów, że w momencie kiedy wynik powinien wynosić 0 (false) wtedy nic nie wyświetla się. Dzieje się tak ponieważ wynik jest typem boolean o wartości false. Aby obejść ten problem trzeba użyć innej funkcji do wyrzucania danych.

Dla osób zainteresowanych tematyka polecam analizę działania skryptu, który wykonałem na potrzeby edukacyjne. Ów informacje znajdują się w artykule pod tytułem Rysowanie przebiegów czasowych bramek logicznych.