Comment ça marche · module en construction

Compter en binaire, octal et hexadécimal

Mis à jour le .

Écrire « 13 », c'est dire « une dizaine et trois unités ». Compter en binaire, en octal ou en hexadécimal, c'est la même chose avec des paquets d'une autre taille : 2, 8 ou 16. Range des jetons, fais tourner des roues, puis apprends à passer d'une base à l'autre.

Choisis ton niveau et ta façon de lire : tu peux en changer à tout moment.

Étape 0 : Compter par paquets

Pour écrire 13 en base 2, on range 13 jetons par paires : 6 paires et 1 jeton seul. On range les paires par deux : 3 paquets de 4 et 0 paire seule. Puis 1 paquet de 8 et 1 paquet de 4 seul. On lit de gauche à droite : 1 paquet de 8, 1 de 4, 0 de 2, 1 jeton, soit 1101. En base 10, on ferait des paquets de 10 : 1 dizaine et 3 unités, soit 13.

🟢 Découverte

Pour compter beaucoup d'objets, on fait des paquets. En décimal, on fait des paquets de 10, puis des paquets de 10 paquets (100), et ainsi de suite. Chaque chiffre dit combien il y a de paquets d'une taille. En binaire, les paquets sont de 2 : on n'a donc besoin que de deux chiffres, 0 et 1.

🟡 Curieux

La baseBase (de numération) — Nombre de chiffres qu'on utilise pour écrire les nombres, et taille des paquets qu'on forme : 10 en décimal (0 à 9), 2 en binaire (0 et 1), 8 en octal, 16 en hexadécimal., c'est la taille des paquets. En base 2, les paquets valent 1, 2, 4, 8, 16… ; en base 8 : 1, 8, 64, 512… ; en base 16 : 1, 16, 256… Une colonne ne contient jamais autant de paquets que la base : dès qu'on en a assez, on les regroupe dans la colonne de gauche. C'est pour cela qu'il faut exactement autant de chiffres que la base.

🔴 Ingénieur

Un nombre écrit dk…d1d0 en base b vaut dk×bk + … + d1×b + d0. On parle de numération positionnelle : la valeur d'un chiffre dépend de sa place. Avec n chiffres en base b, on écrit bn nombres différents, de 0 à bn − 1 : 8 bits donnent 256 valeurs, de 0 à 255.

Un peu d'histoire

Le décimal n'est pas la seule base de l'histoire. Les Babyloniens comptaient en base 60, avec seulement deux symboles ; il en reste nos 60 minutes et 60 secondes. Les Mayas comptaient en base 20. La numération positionnelle décimale avec un zéro vient d'Inde, d'où elle est passée au monde arabe puis à l'Europe. En 1703, Leibniz publie à Paris une Explication de l'arithmétique binaire, avec la table des nombres écrits en 0 et en 1.

Idées reçues

« Le binaire, c'est compliqué. » C'est exactement le même principe que le décimal, avec des paquets de 2 au lieu de 10. Ce qui change, c'est qu'il faut plus de chiffres : 13 s'écrit avec 2 chiffres en décimal, mais 4 en binaire (1101).

Étape 1 : Le compteur à rouages

De 0 à 16 dans les quatre bases :

DécimalOctalHexadécimalBinaire
0000
1111
22210
33311
444100
555101
666110
777111
81081000
91191001
1012A1010
1113B1011
1214C1100
1315D1101
1416E1110
1517F1111
16201010000

🟢 Découverte

Un compteur de vélo ou de vieille voiture est fait de roues. Quand la roue des unités passe de 9 à 0, elle fait avancer d'un cran la roue des dizaines : c'est la retenue. Ici, quatre compteurs tournent en même temps : en décimal, en octal, en hexadécimal et en binaire.

🟡 Curieux

Chaque roue a autant de crans que la base : 10 en décimal, 8 en octal, 16 en hexadécimal, 2 en binaire. La roue binaire des unités fait un tour complet tous les 2 pas, celle de l'octal tous les 8. Compte de 15 à 16 : en hexadécimal, F devient 10 ; en binaire, quatre roues tournent d'un coup (1111 devient 10000).

🔴 Ingénieur

Un ordinateur compte avec des registres de taille fixe : sur 8 bits, 255 + 1 donne 0 et la retenue sort du registre (un « débordement »). Ce compteur s'arrête à 4 095, la plus grande valeur sur 12 bits ; un vrai processeur, lui, repartirait de 0 ou signalerait le débordement. Le module Comment marche un ordinateur montre l'additionneur qui calcule ces retenues.

Idées reçues

« 10, c'est dix. » Seulement en décimal : « 10 » veut dire « un paquet et zéro unité ». En binaire, 10 vaut deux ; en octal, huit ; en hexadécimal, seize. D'où la blague : « il y a 10 sortes de personnes, celles qui comprennent le binaire et les autres ».

Étape 2 : Passer d'une base à l'autre

Du décimal vers le binaire : on divise 13 par 2 (6, reste 1), puis 6 par 2 (3, reste 0), 3 par 2 (1, reste 1), 1 par 2 (0, reste 1). On lit les restes de bas en haut : 1101.

De l'hexadécimal vers le décimal : 2F = 2 × 16 + 15 × 1 = 47 (F vaut 15).

🟢 Découverte

Deux recettes suffisent. Pour écrire un nombre décimal dans une autre base, on le divise par la base encore et encore, et on garde les restes. Pour revenir au décimal, on multiplie chaque chiffre par son poids et on additionne.

🟡 Curieux

Les restes des divisions sont les chiffres, du plus petit poids au plus grand : c'est pour cela qu'on les lit de bas en haut. Dans l'autre sens, en hexadécimal, n'oublie pas que A vaut 10, B 11, C 12, D 13, E 14 et F 15 : 2F = 2 × 16 + 15 = 47.

🔴 Ingénieur

Les langages de programmation écrivent souvent ces bases avec un préfixe : 0x2F en hexadécimal, 0o57 en octal, 0b101111 en binaire (c'est le cas en Python, par exemple). Pour passer d'une base à une autre qui n'est pas le décimal, le plus simple est souvent de passer par le binaire (étape suivante).

Idées reçues

« On lit les restes dans l'ordre. » Non : le premier reste est le chiffre des unités, donc le plus à droite. Lu de haut en bas, 13 donnerait 1011 (11) au lieu de 1101.

Étape 3 : Les raccourcis : hexadécimal et octal

Un chiffre hexadécimal vaut exactement 4 bits, un chiffre octal 3 bits. Pour passer du binaire à l'hexadécimal, on coupe en paquets de 4 depuis la droite : 1111 0000 1010 donne F, 0, A, soit F0A. Pour l'octal, on coupe par 3 : 111 101 101 donne 7, 5, 5, soit 755, les droits « rwxr-xr-x » d'un fichier Unix.

🟢 Découverte

Une longue suite de 0 et de 1 est difficile à lire. Comme 16 = 2 × 2 × 2 × 2, un chiffre hexadécimalHexadécimal — Écriture des nombres en base 16, avec les chiffres 0 à 9 puis A à F (A vaut 10, F vaut 15). Un chiffre hexadécimal remplace exactement 4 bits : un octet s'écrit en deux chiffres, de 00 à FF. remplace exactement 4 bits ; comme 8 = 2 × 2 × 2, un chiffre octal en remplace 3. On coupe le binaire en paquets depuis la droite, et chaque paquet devient un chiffre.

🟡 Curieux

C'est pour cela que l'hexadécimal est partout en informatique : un octetOctet — Unité de base des données : 8 bits, soit un nombre entre 0 et 255. Une lettre simple tient en un octet. s'écrit en deux chiffres, de 00 à FF. Les couleurs du web s'écrivent ainsi (#FF0000 pour le rouge : FF de rouge, 00 de vert, 00 de bleu), comme les adresses IPv6. L'octal sert surtout pour les droits des fichiers sous Linux : chmod 755 veut dire rwx pour le propriétaire, r-x pour le groupe et les autres.

🔴 Ingénieur

Les droits Unix tiennent sur 9 bits : 3 bits (lecture, écriture, exécution) pour le propriétaire, le groupe et les autres. Trois bits, c'est un chiffre octal : 7 = 111 = rwx, 5 = 101 = r-x, 4 = 100 = r--. Tu peux t'y exercer dans le jeu Quêtes de Sysadmin.

Idées reçues

« Les lettres de l'hexadécimal sont un code secret. » Ce sont juste des chiffres en plus : après 9, il fallait six symboles pour 10 à 15, et on a pris A à F. Majuscules ou minuscules, c'est la même valeur.

Ce qu'il faut retenir

  1. Une base, c'est une taille de paquets : 10, 2, 8 ou 16. Chaque chiffre compte des paquets d'une taille.
  2. Une retenue, c'est une roue qui a fini son tour et fait avancer sa voisine.
  3. Vers une base : divisions successives, restes lus de bas en haut. Vers le décimal : chiffres fois poids, puis somme.
  4. Hexadécimal = 4 bits, octal = 3 bits : on regroupe le binaire depuis la droite.
  5. On les croise partout : couleurs du web, droits des fichiers, adresses IP.

La suite logique : Adresses IP et masques, où l'on lit des adresses en binaire et en hexadécimal. Pour voir comment un ordinateur stocke et calcule ces bits : Comment marche un ordinateur.