L'opérateur
|
Cet opérateur fait un OU inclusif bit à bit : il donne 1 si l'un
ou l'autre des deux bits de même poids est à 1, ou si les deux sont
à 1.
Ainsi, 12 | 10 = 14 (1100 | 1010 = 1110).
L'opérateur ^
Cet opérateur fait un OU exclusif : sa seule différence avec l'opérateur
| est que, dans le cas où deux bits de même poids seraient à
1, il retourne 0.
Ainsi, 12 ^ 10 = 6 (1100 ^ 1010 = 0110).
L'opérateur
~
Cet opérateur fait un NON : il inverse tous les bits de son (unique) opérande.
~12 = 3 (~1100 = 0011)
~10 = 5 (~1010 = 0101)
a
|
1100
|
b
|
1010
|
a & b
|
1000
|
a | b
|
1110
|
a^b
|
0110
|
~a
|
0011
|
a >> 1
|
0110
|
a << 1
|
1000
|
Les opérateurs
<< et >>
Ces opérateurs décalent littéralement les bits, vers la gauche ou
vers la droite. Les bits "sortis" sont perdus, les bits "entrants"
sont des 0. La seconde opérande indique le nombre de rangs de décalage.
12 << 2 = 0 (1100 << 2 = 0000)
10 << 2 = 8 (1010 << 2 = 1000)
12 >> 2 = 3 (1100 >> 2 = 0011)
Le tableau ci-dessus,
avec ses valeurs a et b, permet des résumer la situation...
A
quoi peuvent-ils me servir ?
Présentés comme cela, les opérateurs
binaires semble encore être plus une complication qu'un
réel avantage. Nous allons vous expliquer pourquoi
ils peuvent vous être extrêmement utiles, et vous
faire gagner un temps précieux.
Les applications de chacun
sont comme suit :
& : tester si un bit est à 1, ou mettre un bit spécifique à
0
| : mettre un bit spécifique à 1
^ : inverser un bit spécifique
<< : multiplier par une puissance de 2
>> : diviser par une puissance de 2
L'aspect pratique n'est
pas encore visible. Mais prenons l'exemple d'une application avec de nombreuses
options. On pourrait stocker ses options sous la forme suivante :
$sauvegarde_automatique = true;
$verif_ortho = true;
$confirmer_quitter = false;
$afficher_numero_ligne = true;
Dans ce cas, il serait plus
simple d'utiliser $config=13, 13 ayant comme équivalent
binaire 1101. A partir du moment où l'on sait à quoi correspond
le bit d'un poids donné, on peut comprendre que 1 = true et 0 = false,
et ensuite utiliser les opérateurs binaires pour tester les valeurs...
if ($config & 0) // pas d'option ?
{ ... }
elseif ($config & 1) // afficher les numéros de lignes ?
{ ... }
elseif ($config & 2) // confirmer quitter ?
{ ... }
elseif ($config & 4) // verifier l'orthographe ?
{ ... }
elseif ($config & 8) // sauvegarde automatique ?
{ ... }
Les tests peuvent être combinés...
elseif ($config & 10) // sauvegarde auto + confirmer
quitter ?
{ ... }
Ces opérateurs peuvent
avoir d'autres usages dans de nombreux domaines, pas seulement en combinaison
avec des entiers.
Page 1 | 2
|