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
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Bit | un chiffre binaire, 0 ou 1 | |
| Octet | un groupe de huit bits | |
| Décimal | la façon habituelle de compter, avec les chiffres 0 à 9 | |
| Binaire | compter avec seulement 0 et 1 | 1001101 |
| Poids | ce que vaut un chiffre selon sa place | |
| Hexadécimal | compter par seize, avec 0 à 9 puis A à F | AC |
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
| Poids | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| Bit | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 |
| Valeur | 0 | 64 | 0 | 0 | 8 | 4 | 0 | 1 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Va dans le dossier arch
cd ~/archAffiché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
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
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
| Nombre | Quotient par 2 | Reste |
|---|---|---|
| 19 | 9 | 1 |
| 9 | 4 | 1 |
| 4 | 2 | 0 |
| 2 | 1 | 0 |
| 1 | 0 | 1 |
| Lu de bas en haut | 10011 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Vérifie 19 avec Python
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écimal | Binaire | Les deux moitiés | Hexadécimal |
|---|---|---|---|
| 172 | 10101100 | 1010 vaut 10, 1100 vaut 12 | AC |
| 255 | 11111111 | 1111 vaut 15, 1111 vaut 15 | FF |
| 77 | 01001101 | 0100 vaut 4, 1101 vaut 13 | 4D |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Le shell écrit 172 en hexadécimal
printf '%x\n' 172Affiché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
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 ?