Apprendre › Chapitre 6
Systèmes de numération : binaire, octal, hexadécimal et codes
7 min de lecture · Équipe bitGateLab
Un circuit numérique ne comprend que des zéros et des uns, alors que vous avez besoin de représenter des quantités, des signes, les chiffres d'un afficheur ou les positions d'un codeur. Vous allez apprendre ici comment fonctionnent les systèmes positionnels, comment convertir entre décimal, binaire, octal et hexadécimal, comment représenter les nombres négatifs en complément à 2 et comment utiliser deux codes très courants en électronique : le BCD et le Gray.
Systèmes positionnels
Dans un système positionnel de base b, chaque chiffre est multiplié par une puissance de b qui dépend de sa position, comptée à partir de 0 depuis la droite. Le nombre décimal 347 vaut 3·102 + 4·101 + 7·100. Il en va de même pour les autres bases :
- Binaire (base 2) : chiffres 0 et 1, appelés bits. Poids 1, 2, 4, 8, 16, 32, 64, 128...
- Octal (base 8) : chiffres 0 à 7. Chaque chiffre octal équivaut à 3 bits.
- Hexadécimal (base 16) : chiffres 0 à 9 et A à F (A = 10, B = 11, C = 12, D = 13, E = 14, F = 15). Chaque chiffre hexadécimal équivaut à 4 bits.
Pour éviter les confusions, on indique la base par un indice (10102, 178, 3F16) ou par un préfixe comme 0b ou 0x.
Conversions entre bases
D'une base quelconque vers le décimal
Multipliez chaque chiffre par son poids et additionnez. Par exemple, 2F316 = 2·256 + 15·16 + 3·1 = 512 + 240 + 3 = 755.
Du décimal vers le binaire
Divisez par 2 de façon répétée et notez les restes ; le nombre binaire se lit de bas en haut (le dernier reste est le bit de poids fort). Une autre méthode consiste à soustraire, encore et encore, la plus grande puissance de 2 qui tient dans le nombre.
Entre binaire, octal et hexadécimal
Comme 8 = 23 et 16 = 24, il est inutile de passer par le décimal : regroupez les bits 3 par 3 (octal) ou 4 par 4 (hexadécimal) en partant de la droite, et complétez par des zéros à gauche si nécessaire.
Exemple 1 : convertir 156 en binaire, en octal et en hexadécimal.
- Divisions successives : 156/2 = 78 reste 0 ; 78/2 = 39 reste 0 ; 39/2 = 19 reste 1 ; 19/2 = 9 reste 1 ; 9/2 = 4 reste 1 ; 4/2 = 2 reste 0 ; 2/2 = 1 reste 0 ; 1/2 = 0 reste 1.
- En lisant les restes de bas en haut : 156 = 100111002. Vérification : 128 + 16 + 8 + 4 = 156.
- Octal : 10 011 100 → 010 011 100 → 2 3 4. Résultat 2348 (2·64 + 3·8 + 4 = 156).
- Hexadécimal : 1001 1100 → 9 C. Résultat 9C16 (9·16 + 12 = 156).
Nombres négatifs : le complément à 2
Un registre de n bits n'a pas d'emplacement pour le signe « moins » ; on recourt donc à une convention. Celle qu'utilisent pratiquement tous les processeurs est le complément à 2 : le bit de poids fort a un poids négatif, −2n−1, et les autres conservent leur poids positif. Sur 8 bits, la plage va de −128 à +127 ; sur 4 bits, de −8 à +7.
Pour obtenir l'opposé d'un nombre :
- Écrivez le nombre positif avec tous ses bits.
- Inversez chaque bit (c'est le complément à 1).
- Ajoutez 1.
L'avantage est considérable : l'addition et la soustraction se font avec le même circuit additionneur, sans logique particulière pour le signe. Il n'y a qu'un seul zéro (00000000) et le bit de poids fort indique directement si le nombre est négatif.
Exemple 2 : représenter −45 sur 8 bits et calculer 25 + (−12).
- 45 = 00101101. En inversant : 11010010. En ajoutant 1 : 11010011 = −45.
- Vérification avec les poids : −128 + 64 + 16 + 2 + 1 = −45.
- Passons à 25 + (−12). 25 = 00011001 ; 12 = 00001100, inversé 11110011, plus 1 : 11110100 = −12.
- Addition : 00011001 + 11110100 = 1 00001101. La retenue qui sort du bit 8 est ignorée.
- Résultat : 00001101 = 13. Correct.
Code BCD
En BCD (décimal codé binaire, version 8421), chaque chiffre décimal est représenté séparément sur 4 bits. Ainsi, 395 s'écrit 0011 1001 0101. Ce n'est pas la même chose que convertir 395 en binaire (1100010112) : le BCD utilise plus de bits, mais chaque groupe est envoyé directement à un décodeur pour afficheur 7 segments, sans aucune division. Les codes 1010 à 1111 ne sont pas valides en BCD ; dans une conception, ces combinaisons sont généralement traitées comme des cas indifférents dans les tableaux de Karnaugh.
Code Gray
Dans le code Gray, un seul bit change entre une valeur et la suivante. En binaire naturel, le passage de 7 (0111) à 8 (1000) modifie les quatre bits à la fois ; si un capteur fait sa lecture en pleine transition, il peut voir un instant n'importe quelle valeur intermédiaire. Avec le code Gray, cette erreur ne se produit pas ; c'est pourquoi on l'emploie dans les codeurs de position, dans les compteurs qui passent d'un domaine d'horloge à un autre et dans les en-têtes des tableaux de Karnaugh.
- Binaire vers Gray : le bit de poids fort est recopié ; chaque bit suivant est le XOR du bit binaire correspondant et du bit binaire situé à sa gauche. En formule, g = b ⊕ (b décalé d'un rang vers la droite).
- Gray vers binaire : le bit de poids fort est recopié ; chaque bit binaire suivant est le XOR du bit binaire que l'on vient d'obtenir et du bit Gray de cette position.
| Décimal | Binaire | Gray | Décimal | Binaire | Gray |
|---|---|---|---|---|---|
| 0 | 0000 | 0000 | 8 | 1000 | 1100 |
| 1 | 0001 | 0001 | 9 | 1001 | 1101 |
| 2 | 0010 | 0011 | 10 | 1010 | 1111 |
| 3 | 0011 | 0010 | 11 | 1011 | 1110 |
| 4 | 0100 | 0110 | 12 | 1100 | 1010 |
| 5 | 0101 | 0111 | 13 | 1101 | 1011 |
| 6 | 0110 | 0101 | 14 | 1110 | 1001 |
| 7 | 0111 | 0100 | 15 | 1111 | 1000 |
Exemple 3 : le binaire 1011 vers Gray, et retour.
- Recopiez le premier bit : 1.
- 1 ⊕ 0 = 1 ; 0 ⊕ 1 = 1 ; 1 ⊕ 1 = 0. Gray = 1110.
- Retour : recopiez le premier bit, b3 = 1. Ensuite b2 = 1 ⊕ 1 = 0, b1 = 0 ⊕ 1 = 1, b0 = 1 ⊕ 0 = 1. Binaire = 1011.
Dans la table, le 11 décimal apparaît avec le code Gray 1110 : cela concorde.
Erreurs fréquentes
- Regrouper les bits pour l'octal ou l'hexadécimal en partant de la gauche. On regroupe toujours à partir du bit de poids faible.
- Oublier le « +1 » du complément à 2. Se contenter d'inverser donne le complément à 1, qui a deux zéros et une autre plage.
- Interpréter 11010011 comme 211 alors que le registre est signé. Le même motif de bits vaut 211 en non signé ou −45 en signé : tout dépend de la convention.
- Confondre BCD et binaire. Le 25 en BCD s'écrit 0010 0101, alors qu'en binaire il s'écrit 11001.
- Convertir du Gray vers le binaire en faisant le XOR avec le bit Gray voisin au lieu du bit binaire que l'on vient de calculer.
Essayez dans le simulateur
Vous pouvez voir ces représentations « en direct » avec quelques entrées et sorties, et vérifier la conversion en code Gray avec des portes XOR.
- Placez quatre entrées pour les bits b3 à b0 et branchez un afficheur ou quatre LED pour voir la valeur.
- Ajoutez trois portes XOR : g2 = b3 ⊕ b2, g1 = b2 ⊕ b1, g0 = b1 ⊕ b0, et reliez b3 directement à g3.
- Faites passer les entrées de 0000 à 1111 et observez sur les sorties qu'un seul bit Gray change entre une valeur et la suivante.
- Générez la table de vérité du circuit et comparez-la à la table de cet article.
Exercices
- Convertissez 110101102 en hexadécimal et en décimal.
Réponse
1101 0110 = D616 = 13·16 + 6 = 214.
- Convertissez 200 en binaire et en hexadécimal.
Réponse
200 = 128 + 64 + 8 = 110010002 = C816.
- Représentez −100 en complément à 2 sur 8 bits.
Réponse
100 = 01100100 ; inversé 10011011 ; plus 1 : 10011100. Vérification : −128 + 16 + 8 + 4 = −100.
- Convertissez le nombre décimal 6 en code Gray sur 4 bits et le BCD 0111 0010 en décimal.
Réponse
6 = 0110 ; Gray : 0, 0 ⊕ 1 = 1, 1 ⊕ 1 = 0, 1 ⊕ 0 = 1 → 0101. Le BCD 0111 0010 vaut 72.
Pour voir comment un circuit additionne et soustrait ces nombres, poursuivez avec les additionneurs binaires.