Les
opérateurs de bits (aussi appelés "opérateurs bit à
bit" ou "binaires") sont bien souvent méconnus, car ils
semblent plus compliqués à comprendre que les opérateurs
logiques, d'autant que leur utilité n'est pas immédiatement palpable.
Utiles, ils le sont pourtant, et c'est ce que nous allons tenter de montrer dans
cet article.
Qui sont-ils ?
Tous les langages modernes en disposent, et les développeurs qui ne s'y
sont pas intéressés se sont sûrement demandés à
quoi pouvaient servir les opérateurs &,
|, >> et
consorts quand les opérateurs logiques (&&,
|| et > par
exemple) semblaient suffire largement.
Ce sont là nos fameux opérateurs de bits. Plus précisément,
"opérateur de bit" désigne généralement
(certains langages ont leurs spécificités) les opérateurs
suivants :
& : ET
| : OU (inclusif)
^ : OU (exclusif)
~ : NON (négation unaire, ou "complément
à 1")
>> : décalage à droite
<< : décalage à gauche
Il en existe d'autres (&=, >>>,
...), mais ils ne sont pas implémentés dans tous les langages.
|
Que font-ils ?
C'est ici que les choses semblent se compliquer, mais cela
reste pourtant très simple.
12 & 10 = 8
Le résultat de ce "calcul" semble incompréhensible, il
faut d'abord connaître le fondement de ces opérateurs.
Comme leur nom l'indique, les opérateurs de bits "travaillent"
sur les bits. La comparaison avec le opérateurs logiques
s'arrête au fait que ces derniers répondent à
des valeurs true ou false;
les opérateurs binaires, quant à eux, travaillent
avec des suites de 0 et de 1 - les nombres sont interprétés
comme des opérateurs binaires.
12
|
1100
|
&
|
&
|
10
|
1010
|
=
|
=
|
8
|
1000
|
Pour ceux qui sont perdus, un tableau fera plus
d'effet (voir ci-contre). Il nous faut
pour expliquer ce tableau, expliquer pourquoi 12 est équivalent
à 1100, 10 à 1010, et 8 à 1000 : ces
secondes valeurs sont les interprétations binaires
de ces chiffres, c'est à dire leur représentation
sous forme de bits.
nombre
|
équivalent
binaire
|
0
|
0000
|
1
|
0001
|
2
|
0010
|
3
|
0011
|
4
|
0100
|
5
|
0101
|
6
|
0110
|
7
|
0111
|
8
|
1000
|
9
|
1001
|
10
|
1010
|
11
|
1011
|
12
|
1100
|
13
|
1101
|
14
|
1110
|
15
|
1111
|
Chaque développeur
devrait connaître le second tableau ci-contre par coeur.
(autre méthode
pour retenir les équivalences : compter sur les doigts d'une main, un doigt
baissé étant équivalent à 0, un levé à
1).
Nos opérateurs binaires convertissent donc directement, lorsque l'on fait
appel à eux, les valeurs données en leurs équivalent binaire,
puis font le "calcul". Quel calcul ? Chacun a sa spécialité...
L'opérateur
&
Cet opérateur fait un ET bit à bit sur les valeurs données
: il donne pour résultat 1 si les deux bits de même poids (à
la même position) sont à 1. Les autres bits sont mis à zéro.
Cela explique donc notre 12 & 10 = 8 : seuls les quatrièmes bits (les
bits se lisent de droite à gauche) des équivalents binaires de 12
et 10 (1100 et 1010) sont à 1, les autres étant soit à 1
ou à 0, mais pas sur le même "emplacement". Le résultat
donne donc le binaire 1000, qui correspond à 8.
Page 1 | 2
|