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 bit | Poids (puissance de 2) | Valeur décimale |
|---|---|---|
| bit 0 (le plus à droite) | 2⁰ | 1 |
| bit 1 | 2¹ | 2 |
| bit 2 | 2² | 4 |
| bit 3 | 2³ | 8 |
| bit 4 | 2⁴ | 16 |
| bit 5 | 2⁵ | 32 |
| bit 6 | 2⁶ | 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écimal | Binaire (4 bits) | Hexadécimal |
|---|---|---|
| 0 | 0000 | 0 |
| 5 | 0101 | 5 |
| 9 | 1001 | 9 |
| 10 | 1010 | A |
| 11 | 1011 | B |
| 12 | 1100 | C |
| 13 | 1101 | D |
| 14 | 1110 | E |
| 15 | 1111 | F |
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
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.
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.
À 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.
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.
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.
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.
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.
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.
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.
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.
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.
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