Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Compter en binaire et en hexadécimal

Après cette leçon: Je peux écrire un entier en binaire et en hexadécimal.

Leçon de 45 min6 commandesLab de compilation et d’architecture : gcc, flex, bison et RISC-V dans une VM

Le compteur de vues bloqué

En 2014, une vidéo de musique a presque dépassé le nombre de vues que le site savait compter. Son compteur arrivait au bout.

Le site avait réservé un nombre fixe de chiffres binaires pour ce compteur. Il a dû en prévoir plus, en urgence. Aujourd'hui, tu vas comprendre pourquoi un nombre de chiffres fixe donne une limite.

À la fin de cette leçon

Remarque

Je peux écrire un entier en binaire et en hexadécimal.

Mots clés

MotCe que ça veut direExemple
Bitun chiffre binaire, 0 ou 1
Octetun groupe de huit bits
Décimalla façon habituelle de compter, avec les chiffres 0 à 9
Binairecompter avec seulement 0 et 11001101
Poidsce que vaut un chiffre selon sa place
Hexadécimalcompter par seize, avec 0 à 9 puis A à FAC

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Avant de commencer

Remarque

Appuie sur Start the lab dans la barre en haut. Le lab est une vraie machine Ubuntu rien qu'à toi, elle met une minute à démarrer. Chaque bouton Run tape sa commande dans le terminal de la machine.

Le binaire n'a que 0 et 1

Dans un ordinateur, chaque nombre est tenu par des interrupteurs, éteints ou allumés. On écrit éteint 0 et allumé 1.

En décimal, chaque place vaut dix fois celle de droite. En binaire, chaque place vaut deux fois celle de droite. Les huit places d'un octet ont pour poids 128, 64, 32, 16, 8, 4, 2 et 1. On additionne les poids des places qui portent un 1.

Exemple : 77 dans un octet

Poids1286432168421
Bit01001101
Valeur064008401

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Va dans le dossier arch

Commande
cd ~/arch

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Demande 77 en binaire à Python

Commande
python3 -c "print(bin(77))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Le shell lit aussi le binaire

Commande
echo $((2#1011))

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Diviser par 2 donne les bits

Pour écrire un nombre en binaire, divise-le par 2 et note le reste, 0 ou 1. Divise encore le quotient par 2. Continue jusqu'à 0.

Les restes sont les bits. Lis-les du dernier au premier, de bas en haut.

Exemple : 19 par divisions successives

NombreQuotient par 2Reste
1991
941
420
210
101
Lu de bas en haut10011

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Vérifie 19 avec Python

Commande
python3 -c "print(bin(19))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

Beaucoup lisent les restes dans l'ordre où ils les ont trouvés. Ils écrivent alors 11001 pour 19, ce qui vaut 25. Le premier reste est le bit de droite, celui qui vaut 1. Lis toujours les restes de bas en haut.

L'hexadécimal raccourcit le binaire

Une longue suite de bits est difficile à lire. L'hexadécimal compte par seize. Il utilise 0 à 9, puis A à F pour dix à quinze.

Un chiffre hexadécimal remplace exactement quatre bits. Un octet s'écrit donc toujours avec deux chiffres hexadécimaux. Coupe l'octet en deux moitiés de quatre bits et écris chaque moitié avec un chiffre.

Exemple : des octets en hexadécimal

DécimalBinaireLes deux moitiésHexadécimal
172101011001010 vaut 10, 1100 vaut 12AC
255111111111111 vaut 15, 1111 vaut 15FF
77010011010100 vaut 4, 1101 vaut 134D

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Le shell écrit 172 en hexadécimal

Commande
printf '%x\n' 172

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Et dans l'autre sens

Commande
echo $((16#4d))

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pour aller plus loin : les adresses MAC

Chaque carte réseau a une adresse MAC, écrite en six octets hexadécimaux, par exemple 3C:A0:67:1F:00:FE.

Écris chaque octet en décimal à la main. Vérifie ensuite avec ta fonction vers_base du devoir, en base 16. Combien d'adresses MAC différentes peut-on écrire avec six octets ?

À propos de ce labo et de sa source: Lab de compilation et d’architecture : gcc, flex, bison et RISC-V dans une VM

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.