Aller au contenu

Représentation des nombres : binaire et hexadécimal

Première · NSI · Représentation des données

Représentation des données

Compter en binaire : bases, bits et octets

Une machine ne manipule que deux états électriques : allumé ou éteint. Tout ce qu'un ordinateur traite — un nombre, un texte, une image, un son — finit donc par être une suite de 0 et de 1. Comprendre le binaire, c'est comprendre ce que la machine voit vraiment quand tu écris x = 42.

Le principe d'une base de numération

En base 10, l'écriture 2 5 3 est un raccourci : elle signifie 2 × 100 + 5 × 10 + 3 × 1, c'est-à-dire 2 × 10² + 5 × 10¹ + 3 × 10⁰. Chaque chiffre a un poids qui dépend de sa position, et ce poids est une puissance de la base.
Rien n'oblige à choisir 10 comme base ! On peut compter en base 2 (deux chiffres : 0 et 1), en base 16 (seize chiffres), ou en base 7 si le cœur t'en dit. Le principe reste identique : position = puissance de la base.

Bits, octets et capacité de codage

Un bit (binary digit) est un chiffre binaire : il vaut 0 ou 1. Un groupe de 8 bits forme un octet (byte en anglais).
Avec n bits, chaque bit ayant 2 valeurs possibles, on peut former 2^n combinaisons différentes. Un octet permet donc de coder 2⁸ = 256 valeurs, soit les entiers naturels de 0 à 255.
Retiens la formule dans les deux sens : n bits codent 2^n valeurs, et l'entier naturel maximal représentable sur n bits vaut 2^n − 1.

Position du bitPoids (puissance de 2)Valeur décimale
bit 0 (le plus à droite)2⁰1
bit 12¹2
bit 22²4
bit 32³8
bit 42⁴16
bit 52⁵32
bit 62⁶64
bit 7 (le plus à gauche d'un octet)2⁷128

Représentation des données

Hexadécimal, entiers relatifs et nombres à virgule

La base 16 et le lien magique avec le binaire

Écrire une adresse mémoire ou une couleur en binaire donne des chaînes interminables. L'hexadécimal (base 16) sert de raccourci d'écriture pour les humains : il est quatre fois plus compact que le binaire, et la conversion entre les deux est immédiate.

La base 16 a besoin de seize chiffres. On réutilise 0 à 9, puis on emprunte les lettres A, B, C, D, E, F pour représenter 10, 11, 12, 13, 14 et 15. On préfixe souvent par 0x : 0x2A se lit « deux-A en hexadécimal » et vaut 2 × 16 + 10 = 42.
Le point clé : comme 16 = 2⁴, un chiffre hexadécimal correspond exactement à 4 bits. Un octet s'écrit donc toujours avec exactement 2 chiffres hexadécimaux.

DécimalBinaire (4 bits)Hexadécimal
000000
501015
910019
101010A
111011B
121100C
131101D
141110E
151111F

Les entiers relatifs : le complément à deux

Les nombres à virgule : une approximation.
Les réels sont stockés en virgule flottante : un signe, une mantisse et un exposant, sur un nombre fini de bits. Or beaucoup de nombres décimaux simples n'ont pas d'écriture binaire finie — 0,1 en base 2 est périodique, exactement comme 1/3 en base 10.
La machine stocke donc une valeur approchée. C'est pourquoi en Python 0.1 + 0.2 == 0.3 renvoie False : la somme calculée vaut 0.30000000000000004.
Conséquence pratique : on ne teste jamais l'égalité stricte de deux flottants. On vérifie plutôt que leur écart est très petit, avec abs(a - b) < 1e-9. En revanche, les entiers Python sont exacts et de taille non bornée : le problème ne concerne que les flottants.

Exercices corrigés

  1. Combien de valeurs différentes peut-on coder sur 8 bits ?

    • A.8 valeurs
    • B.16 valeurs
    • C.255 valeurs
    • D.256 valeursBonne réponse

    Réponse : D — 256 valeurs

    Chaque bit a 2 états possibles, et les 8 bits sont indépendants : cela fait 2 × 2 × … × 2 (huit fois), c'est-à-dire 2⁸ = 256 combinaisons. Attention au piège classique : 255 n'est pas le NOMBRE de valeurs mais la valeur MAXIMALE, car on commence à compter à 0. Les entiers codés vont de 0 à 255, ce qui fait bien 256 valeurs au total.

  2. Combien de bits contient un octet ?

    • A.4 bits
    • B.8 bitsBonne réponse
    • C.16 bits
    • D.1024 bits

    Réponse : B — 8 bits

    Un octet est par définition un groupe de 8 bits — c'est d'ailleurs de là que vient le mot « octet », comme « octave » ou « octogone ». En anglais on dit byte. Le 1024 vient d'une autre notion : c'est 2¹⁰, le nombre d'octets d'un kibioctet.

  3. À combien de bits correspond exactement un chiffre hexadécimal ?

    • A.2 bits
    • B.3 bits
    • C.4 bitsBonne réponse
    • D.8 bits

    Réponse : C — 4 bits

    Un chiffre hexadécimal prend 16 valeurs différentes, et 16 = 2⁴ : il faut donc 4 bits pour coder toutes ces valeurs, de 0000 à 1111. C'est ce lien qui rend l'hexadécimal si pratique : on convertit par paquets de 4 bits, sans aucun calcul. Répondre 8 bits, c'est confondre avec l'octet, qui s'écrit lui avec DEUX chiffres hexadécimaux.

  4. Comment s'écrit le nombre décimal 156 en binaire sur un octet ?

    • A.10011100Bonne réponse
    • B.10011010
    • C.11001100
    • D.10101100

    Réponse : A — 10011100

    On décompose 156 en somme de puissances de 2 : 156 = 128 + 28, puis 28 = 16 + 12, puis 12 = 8 + 4. Donc 156 = 128 + 16 + 8 + 4, ce qui allume les bits de poids 128, 16, 8 et 4 : 1 0 0 1 1 1 0 0. Vérifions les distracteurs : 10011010 vaut 128 + 16 + 8 + 2 = 154, 11001100 vaut 128 + 64 + 8 + 4 = 204 et 10101100 vaut 128 + 32 + 8 + 4 = 172. Aucun ne fait 156.

  5. Quelle est l'écriture hexadécimale de l'octet 11010110 ?

    • A.C6
    • B.D6Bonne réponse
    • C.6D
    • D.B6

    Réponse : B — D6

    On découpe en paquets de 4 bits en partant de la droite : 1101 | 0110. Le paquet 1101 vaut 8 + 4 + 1 = 13, donc D. Le paquet 0110 vaut 4 + 2 = 6, donc 6. L'écriture est D6. Répondre 6D, c'est écrire les paquets dans le mauvais sens : l'ordre des chiffres compte ! Répondre C6 reviendrait à lire 1100 au lieu de 1101, et B6 à lire 1011.

  6. Que vaut 0x2A en décimal ?

    • A.26
    • B.32
    • C.42Bonne réponse
    • D.210

    Réponse : C — 42

    En base 16, le chiffre de gauche pèse 16 et celui de droite pèse 1. Ici 2 × 16 + A × 1, avec A = 10, donc 32 + 10 = 42. Répondre 32, c'est oublier le A. Répondre 26 correspondrait à 0x1A. Et 210, c'est simplement coller les chiffres 2 et 10 côte à côte, ce qui n'a pas de sens en base 16 — c'est justement pour éviter cela qu'on écrit A plutôt que 10.

  7. Comment s'écrit le nombre décimal 45 en binaire ?

    • A.110101
    • B.101101Bonne réponse
    • C.100101
    • D.101011

    Réponse : B — 101101

    Décomposons par divisions successives : 45 = 2 × 22 + 1, puis 22 = 2 × 11 + 0, 11 = 2 × 5 + 1, 5 = 2 × 2 + 1, 2 = 2 × 1 + 0, 1 = 2 × 0 + 1. On lit les restes du dernier au premier : 101101. Vérification par les poids : 32 + 8 + 4 + 1 = 45. Les distracteurs valent respectivement 110101 = 53, 100101 = 37 et 101011 = 43 : lire les restes dans le mauvais ordre est l'erreur la plus courante ici.

  8. Que vaut l'addition binaire 1011 + 110 ?

    • A.10001Bonne réponse
    • B.1111
    • C.11101
    • D.10011

    Réponse : A — 10001

    Traduisons pour vérifier : 1011₂ = 11 et 110₂ = 6, donc la somme vaut 17, soit 16 + 1 = 10001₂. En posant l'addition directement en binaire : colonne des unités 1 + 0 = 1 ; colonne des 2 : 1 + 1 = 10, on pose 0 et on retient 1 ; colonne des 4 : 0 + 1 + 1 (retenue) = 10, on pose 0 et on retient 1 ; colonne des 8 : 1 + 1 (retenue) = 10, on pose 0 et on retient 1. Résultat : 10001. Répondre 1111 (= 15), c'est oublier de propager les retenues.

  9. Comment code-t-on −5 sur un octet en complément à deux ?

    • A.10000101
    • B.11111011Bonne réponse
    • C.11111010
    • D.00000101

    Réponse : B — 11111011

    On applique les trois étapes. D'abord 5 sur 8 bits : 00000101. Ensuite on inverse tous les bits : 11111010. Enfin on ajoute 1 : 11111011. Le distracteur 11111010 est l'erreur la plus fréquente — c'est le complément à UN, on a oublié le « + 1 » final. Le distracteur 10000101 correspond à la méthode naïve « bit de signe + valeur absolue », qui n'est pas celle des processeurs. Contrôle : 11111011 vaut 251 en non signé, et 251 − 256 = −5.

  10. Un octet contient 11110000. Interprété comme un entier signé en complément à deux, que vaut-il ?

    • A.−16Bonne réponse
    • B.240
    • C.−112
    • D.−15

    Réponse : A — −16

    Le bit de poids fort vaut 1, donc le nombre est négatif. La valeur non signée est 128 + 64 + 32 + 16 = 240, et il suffit de retrancher 256 : 240 − 256 = −16. Vérifions par le codage direct de −16 : 16 s'écrit 00010000, inversé cela donne 11101111, plus 1 cela donne 11110000. C'est bien notre octet. Répondre 240 serait l'interprétation NON signée du même octet ; répondre −112 revient à lire naïvement le bit de gauche comme un signe.

  11. Quel est l'intervalle des entiers représentables sur un octet en complément à deux ?

    • A.de −127 à 127
    • B.de 0 à 255
    • C.de −128 à 127Bonne réponse
    • D.de −128 à 128

    Réponse : C — de −128 à 127

    Sur n bits signés, l'intervalle va de −2^(n−1) à 2^(n−1) − 1, soit de −128 à 127 pour n = 8. L'intervalle n'est volontairement PAS symétrique : les 256 combinaisons se répartissent en 128 valeurs négatives, un zéro, et 127 valeurs positives. C'est ce qui évite d'avoir deux codages différents pour zéro. L'intervalle 0 à 255 correspond à une lecture non signée du même octet.

  12. Un programme stocke des entiers naturels sur 8 bits et calcule 200 + 100. Que contient l'octet résultat ?

    • A.300
    • B.255
    • C.256
    • D.44Bonne réponse

    Réponse : D — 44

    300 dépasse la capacité d'un octet, qui s'arrête à 255 : c'est un dépassement de capacité. Le neuvième bit produit par l'addition est tout simplement perdu, ce qui revient à retirer 2⁸ = 256 au résultat : 300 − 256 = 44. Le point important, et dangereux, est qu'aucune erreur n'est levée : le programme continue avec une valeur fausse. Répondre 255 supposerait un « plafonnement », ce que le matériel ne fait pas par défaut. En Python les entiers ne sont pas bornés et ce souci n'apparaît pas, mais il est bien réel dans les langages proches de la machine.

S'entraîner sur ce chapitre

Ce chapitre compte 35 exercices corrigés dans l'application, avec le suivi de ta progression.

Commencer les exercices