Cours 7.4. Inversion de bits

Il existe une opération de masquage qui permet d'inverser un ou plusieurs bits d'un mot binaire tout en préservant la valeur des autres.

Masquage binaire, inversion de bits

Fonctionnement

L'inversion se fait grâce à un OU exclusif bit à bit entre le registre à modifier et un masque. Les bits du masque sont définis tels que :

Supposons que l'on souhaite inverser les 4 bits de poids faibles d'un mot de 8 bits. Le masque sera :

$$ masque = (0000~1111)_2 = (0F)_{16} $$

$$ \begin{array}[t]{r} b_7 & b_6 & b_5 & b_4 & \, & b_3 & b_2 & b_1 & b_0 & <= & mot \: initial \\ + \quad 0 & 0 & 0 & 0 & \, & 1 & 1 & 1 & 1 & <= & masque \\ \hline b_7 & b_6 & b_5 & b_4 & \, & \overline{b_3} & \overline{b_2} & \overline{b_1} & \overline{b_0} & <= & résultat \end{array} $$

Ce principe s'appuie sur les relations suivantes de l'algèbre de Boole :

Le masque de cet exemple peut être appliqué à la variable reg grâce à l'instruction suivante :

resultat = donnee ^ 0x0F;

Exercice 1

Complétez le programme ci-dessous afin d'inverser le bit de poids faible de la variable reg :

// | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
unsigned char reg = 0x32;
printf ("Avant  : ");
affBin(reg);

// Inversez le bit de poids faible
// COMPLETEZ ICI

// Affiche le résultat
printf ("Après  : ");
affBin(reg);  

Exercice 2

Complétez le programme ci-dessous afin d'inverser les 4 bits de poids fort de la variable reg :

// | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
unsigned char reg = 0x32;
printf ("Avant  : ");
affBin(reg);

// Inverse les 4 bits de poids forts
// COMPLETEZ ICI

// Affiche le résultat
printf ("Après  : ");
affBin(reg); 

Quiz

Quel opérateur faut-il utiliser pour inverser certains bits ?

Vérifier Bravo ! Le masquage permettant d'inverser des bits se fait avec un OU exclusif bit à bit. Essaie encore ...

Dans un masquage d'inversion, les bits du masque qui sont à 1 permettent de ...

Vérifier Bravo ! Les bits à un du masque permettent d'inverser le bit, car en logique booléenne : \( x \oplus 1 = \overline{x} \). Essaie encore ...

Dans un masquage d'inversion, les bits du masque qui sont à 0 permettent de ...

Vérifier Bravo ! Les bits à zéro du masque permettent de conserver les bits initiaux, car en logique booléenne : \( x \oplus 0 = x \). Essaie encore ...

Que vaut reg après ces instructions ?

reg = 0xAA;
reg ^= 0x0F;
Vérifier Bravo ! Le masque inverse les 4 bits de poids faibles. Essaie encore ...

Voir aussi


Dernière mise à jour : 19/11/2021