Gli operatori bitwise agiscono direttamente sui bit dei numeri.
Anche se possono risultare di non facile comprensione, conoscerli è importante per il loro stretto rapporto con la matematica binaria, che è la base dei computer.
Infatti mentre gli umani sono abituati a manipolare i numeri in base 10, il linguaggio macchina è in base 2, che comprende solo 2 valori: 0 (false) e 1 (true).
In PHP gli operatori che lavorano a livello di bit sono:
Operatore | Descrizione | Esempio |
---|---|---|
& |
Operatore binario. Esegue l'AND bit a bit di due numeri. Il risultato è 1 solo se entrambi i bit sono 1. | $x & $y |
| |
Operatore binario. Esegue l'OR (or inclusivo) bit a bit di due numeri. Il risultato è 1 se almeno uno dei bit è 1. | $x | $y |
^ |
Operatore binario. Esegue lo XOR (or esclusivo) bit a bit di due numeri. Il risultato è 1 solo se uno dei bit è 1, ma non tutti e due. | $x ^ $y |
~ |
Operatore unario. Inverte i bit del numero, 1 diventa 0 e viceversa. | ~ $x |
<< |
Operatore binario. Sposta i bit del primo numero a sinistra. Il secondo numero indica in numero di posizioni da spostare. Equivale a moltiplicare il numero per 2. | $a << $b |
>> |
Operatore binario. Sposta i bit del primo numero a destra. Il secondo numero indica in numero di posizioni da spostare. Equivale a dividere il numero per 2. | $a >> $b |
Il seguente programma mostra gli operatori bitwise all'opera:
<?php
$x = 127; // 1111111 in base 2
$y = 85; // 1010101 in base 2
var_dump(decbin($x & $y)); // string(7) 1010101
var_dump(decbin($x | $y)); // string(7) 1111111
var_dump(decbin($x ^ $y)); // string(6) 101010
var_dump(decbin(~ $x)); // string(64) 1111111111111111111111111111111111111111111111111111111110000000
var_dump(decbin($x << 1)); // string(8) 11111110
var_dump(decbin($y >> 2)); // string(5) 10101
Nell'esempio abbiamo utilizzato la funzione decbin()
che converte un numero da decimale a binario, restituendo il risultato sottoforma di stringa.
Il risultato di ogni operazione viene mostrato a video tramite la funzione var_dump()
, che stampa il tipo di dato (string
), la lunghezza e il valore.