bitGateLab Digital · Apprendre
Français
Ouvrir le simulateur

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 :

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.

  1. 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.
  2. En lisant les restes de bas en haut : 156 = 100111002. Vérification : 128 + 16 + 8 + 4 = 156.
  3. Octal : 10 011 100 → 010 011 100 → 2 3 4. Résultat 2348 (2·64 + 3·8 + 4 = 156).
  4. 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 :

  1. Écrivez le nombre positif avec tous ses bits.
  2. Inversez chaque bit (c'est le complément à 1).
  3. 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).

  1. 45 = 00101101. En inversant : 11010010. En ajoutant 1 : 11010011 = −45.
  2. Vérification avec les poids : −128 + 64 + 16 + 2 + 1 = −45.
  3. Passons à 25 + (−12). 25 = 00011001 ; 12 = 00001100, inversé 11110011, plus 1 : 11110100 = −12.
  4. Addition : 00011001 + 11110100 = 1 00001101. La retenue qui sort du bit 8 est ignorée.
  5. Résultat : 00001101 = 13. Correct.
Dépassement de capacité : si vous additionnez deux nombres de même signe et que le résultat est de signe contraire, c'est que le résultat ne tient pas dans les bits disponibles. Par exemple, sur 8 bits, 100 + 50 = 01100100 + 00110010 = 10010110, ce qui vaut −106 en complément à 2 au lieu de 150. L'addition de deux nombres de signes différents ne déborde jamais.

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.

DécimalBinaireGrayDécimalBinaireGray
000000000810001100
100010001910011101
2001000111010101111
3001100101110111110
4010001101211001010
5010101111311011011
6011001011411101001
7011101001511111000

Exemple 3 : le binaire 1011 vers Gray, et retour.

  1. Recopiez le premier bit : 1.
  2. 1 ⊕ 0 = 1 ; 0 ⊕ 1 = 1 ; 1 ⊕ 1 = 0. Gray = 1110.
  3. 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

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.

  1. Placez quatre entrées pour les bits b3 à b0 et branchez un afficheur ou quatre LED pour voir la valeur.
  2. Ajoutez trois portes XOR : g2 = b3 ⊕ b2, g1 = b2 ⊕ b1, g0 = b1 ⊕ b0, et reliez b3 directement à g3.
  3. 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.
  4. Générez la table de vérité du circuit et comparez-la à la table de cet article.

Exercices

  1. Convertissez 110101102 en hexadécimal et en décimal.
    Réponse

    1101 0110 = D616 = 13·16 + 6 = 214.

  2. Convertissez 200 en binaire et en hexadécimal.
    Réponse

    200 = 128 + 64 + 8 = 110010002 = C816.

  3. 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.

  4. 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.