4.7. Opérateurs de manipulation de bits – masques (ET bit à bit, décalage…)

Quand on veut modifier ou connaître certains bits d'une variable au lieu de sa totalité, il faut utiliser les opérateurs de manipulation de bits. Ces opérateurs sont très utiles en informatique industrielle.
Les opérateurs de manipulation de bits disponibles Le Langage C offre la possibilité de réaliser des opérations bit à bit du type :
– ET, OU, OU EXCLUSIF (entre deux entiers) ;
Illustrons cette table avec des exemples d'utilisation :
Exemple 15 : Opérateur de bits
Les opérateurs de décalage précisent le nombre de bits du décalage (a>>5 pour un décalage de 5 bits vers la droite, b<<1 pour un décalage de 1 bit vers la gauche). Dans le décalage à gauche, les "bits de gauche" sont perdus et des bits 0 apparaissent à droite. Dans le décalage à droite, les "bits de droite" sont perdus et des bits 0 ou 1 apparaissent à gauche (0 si a est non signé ; dépendent de la machine si a est signé).
Une notion très utile : le masque. Les opérateurs de bits sont souvent employés avec la notion de masque, en informatique industrielle notamment.
Un masque est une succession binaire destinée à indiquer la position des bits concernés par
une opération (voir dessin). Un ‘1’ dans le masque indique que le bit
est concerné, un ‘0’ qu’il ne l’est pas. On peut aussi utiliser le «
masque inversé » pour certaines opérations comme la mise à 0 d’un bit.
Le masque s’exprime en général sous la forme d’une constante hexadécimale (0xF0, 0x03, 0x40...) ou peut être fabriqué par décalage s’il concerne un seul bit (1<<6, ~(1<<n)).
Comment utiliser le masque ?
Voici quelques applications très utiles des opérateurs de manipulation de bits (voir les dessins des exemples plus loin). Ils utilisent tous comme opérandes une variable a et un masque qui indique l'emplacement des bits concernés : - accès à certains bits d'une valeur en masquant les autres bits (utilisation de l'opérateur ET) :
a & 0x0F permet d'isoler les 4 bits de poids faible de a (masque des 4 bits LSB : 0x0F). - mise à 0 ou à 1 de certains bits d'une valeur :
a = a | 0x0F met à 1 les 4 bits de poids faible de a ;
|