TUTORIELS 
Utiliser les opérateurs binaires

Page 1 | 2

Ils semblent plus compliqués à comprendre que les opérateurs logiques, et leur utilité n'apparaît pas immédiatement palpable. Démonstration du contraire.
 (26 novembre 2003)
 
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;

Discutez en sur les forums

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

 
[ Xavier BorderieJDNet
 
Accueil | Haut de page