Partie I1 · exercices 1 à 10

Le binaire

Comment un ordinateur écrit un nombre, une lettre, une adresse : avec seulement des 0 et des 1

Tout ce qui circule sur Internet (un message, une photo, une vidéo, une page web) est transformé en suites de 0 et de 1. Avant d'étudier comment ces suites voyagent, il faut comprendre comment elles s'écrivent. C'est le thème de cette première partie.

CoursDes 0 et des 1

Un ordinateur est fait de composants électroniques (des transistors) qui n'ont que deux états : le courant passe, ou il ne passe pas. Un processeur en contient des milliards. On note ces deux états 0 et 1 : c'est un bit (binary digit, « chiffre binaire »).

CoursCompter en binaire

Dans l'écriture décimale (base 10), chaque position vaut une puissance de 10 : 155 = 1 × 100 + 5 × 10 + 5 × 1. En binaire (base 2), chaque position vaut une puissance de 2. Pour un octet :

Position8e7e6e5e4e3e2e1re
Valeur de la position1286432168421
Exemple : 1001101110011011

Du binaire au décimal : on additionne les valeurs des positions qui contiennent un 1.

10011011 = 128 + 16 + 8 + 2 + 1 = 155.

Du décimal au binaire : on cherche, en partant de la plus grande valeur, si elle « rentre » dans le nombre. Si oui, on écrit 1 et on la retranche ; sinon on écrit 0.

Valeur1286432168421
155 − … reste155 ≥ 128 : 1, reste 2727 < 64 : 027 < 32 : 027 ≥ 16 : 1, reste 1111 ≥ 8 : 1, reste 33 < 4 : 03 ≥ 2 : 1, reste 11 ≥ 1 : 1, reste 0

On lit les chiffres : 10011011.

Attention

Un nombre binaire comme 1010 se lit « un zéro un zéro », pas « mille dix » : c'est le nombre dix. Quand il peut y avoir un doute, on précise la base : 1010 en base 2, 10 en base 10.

CoursÉcrire du texte : le code ASCII

Pour écrire une lettre, on lui attribue un numéro, puis on écrit ce numéro en binaire. Le code ASCII (American Standard Code for Information Interchange) est une table qui associe un numéro à chaque lettre non accentuée, chiffre et symbole usuel. Le code ASCII de base est écrit sur 7 bits. L'espace a pour numéro 32. (Tu as déjà utilisé cette table dans le thème Cryptage.)

ABCDEFGHIJKLM
65666768697071727374757677
NOPQRSTUVWXYZ
78798081828384858687888990
abcdefghijklm
979899100101102103104105106107108109
nopqrstuvwxyz
110111112113114115116117118119120121122

Attention

La table ASCII de base ne contient pas les lettres accentuées (é, à, ç…). Pour écrire toutes les langues, d'autres codes plus longs ont été créés (comme l'UTF-8, utilisé par les pages web).

Tu peux t'entraîner avec le convertisseur binaire : des bits à cliquer, du texte, et même des adresses IP.

ExercicesJe compte en binaire

EX 01Je découvre 🌶️prise en main

Exercice 1 — Marquer des oiseaux

Pour reconnaître des oiseaux, on leur accroche à la patte une étiquette divisée en cases. Chaque case est soit blanche (□), soit coloriée en noir (■). Deux oiseaux ne doivent jamais avoir la même étiquette.

  1. Il y a 5 oiseaux et des étiquettes de 5 cases. Propose une étiquette pour chaque oiseau.
  2. Il y a 8 oiseaux et des étiquettes de 4 cases. Propose une étiquette pour chaque oiseau.
  3. Il y a toujours 8 oiseaux, mais les étiquettes n'ont que 3 cases. Est-ce possible ? Écris toutes les étiquettes.
  4. Avec 2 cases, combien d'oiseaux au maximum peut-on reconnaître ? Et avec 4 cases ? Et avec n cases ?
Indice

Pense à un compteur : dans chaque case, ■ vaut « 1 » et □ vaut « 0 ». Ne répète jamais la même suite.

💾 📝 réponses dans ton compte rendu, exercice 1

EX 02Je comprends 🌶️prise en main

Exercice 2 — Compter de 0 à 12

Écris les nombres de 0 à 12 en binaire.

  1. Complète la liste. Aide-toi de la méthode du compteur : après 1 vient 10, puis 11, puis 100…
  2. Que remarques-tu sur le dernier chiffre des nombres pairs ? Et des nombres impairs ?
Indice

Combien de chiffres faut-il pour écrire 8 ? Et pour 7 ?

📝 réponses dans ton compte rendu, exercice 2

EX 03Je comprends 🌶️prise en main

Exercice 3 — Du binaire au décimal

Convertis en nombres décimaux, en détaillant les additions :

  1. 10011011
  2. 1010010
  3. 1001111
Indice

Écris les valeurs des positions au-dessus des chiffres, en partant de la droite : 1, 2, 4, 8, 16, 32, 64…

📝 réponses dans ton compte rendu, exercice 3

EX 04Je m'entraîne 🌶️🌶️application

Exercice 4 — Du décimal au binaire

Convertis en binaire, en détaillant la méthode :

  1. 66
  2. 78
  3. 200
Indice

Commence par la plus grande puissance de 2 qui ne dépasse pas le nombre : pour 78, c'est 64.

📝 réponses dans ton compte rendu, exercice 4

EX 05Je m'entraîne 🌶️🌶️application

Exercice 5 — Le double d'un nombre

  1. Convertis en binaire les nombres 10, 15, 30, 60, puis 20, 30, 60, 120.
  2. Compare l'écriture binaire d'un nombre et celle de son double (10 et 20, 15 et 30, 30 et 60, 60 et 120). Que remarques-tu ?
  3. Explique cette règle avec les valeurs des positions.
  4. Quelle règle simple permet de reconnaître un nombre pair écrit en binaire ?
Indice

Écris les deux nombres l'un sous l'autre, en alignant par la droite.

📝 réponses dans ton compte rendu, exercice 5

EX 06Je m'entraîne 🌶️prise en main

Exercice 6 — Combien de valeurs ?

  1. Quel est le plus grand nombre que l'on peut écrire avec un octet ? Quel est le plus petit ?
  2. Combien de nombres différents peut-on écrire avec un octet ?
  3. Combien de valeurs avec 10 bits ? Avec 16 bits ?
  4. Une couleur rouge–vert–bleu utilise 3 octets. Combien de couleurs différentes peut-on écrire ?
Indice

Le plus grand nombre à n bits est « tous les bits à 1 » : c'est 2ⁿ − 1.

📝 réponses dans ton compte rendu, exercice 6

ExercicesJe code du texte

EX 07Je m'entraîne 🌶️🌶️application

Exercice 7 — Majuscules et minuscules

Avec la table ASCII du cours, écris en binaire sur 7 bits les codes des lettres : B, A, C, puis b, a, c.

  1. Complète : B = 66 = ....... ; A = ...
  2. Compare le code d'une majuscule et celui de la même lettre en minuscule. Que remarques-tu ?
  3. Quel est l'écart entre les deux codes ? Pourquoi un seul bit change-t-il ?
Indice

66 = 64 + 2, donc sur 7 bits : 1000010.

📝 réponses dans ton compte rendu, exercice 7

EX 08Je m'entraîne 🌶️🌶️application

Exercice 8 — Décoder un message

Voici un message écrit en code ASCII sur 7 bits :

message.txt
1101111 1110101 0100000 1100101 1110011 0100000 1110100 1110101 0100000 1101110 1100101
  1. Convertis chaque groupe de 7 bits en nombre décimal, puis en lettre avec la table ASCII. Quel est le message ?
  2. Quelle lettre de ce message aurait dû porter un accent ? Pourquoi n'en voit-on pas ?
  3. Réponds à la question, en écrivant ta réponse en lettres, puis en binaire ASCII sur 7 bits (sans accents, ni majuscule).
Indice 1

Le premier groupe 1101111 vaut 64 + 32 + 8 + 4 + 2 + 1 = 111 : c'est la lettre « o ».

Indice 2

0100000 vaut 32 : c'est l'espace.

💾 📝 réponses dans ton compte rendu, exercice 8

ExercicesLe binaire avec Python

Python sait convertir : bin(155) donne '0b10011011' et int("10011011", 2) donne 155. Mais pour comprendre, on va écrire nous-mêmes les conversions.

EX 09Je m'entraîne 🌶️🌶️application

Exercice 9 — Du décimal au binaire, en Python

Recopie et exécute ce programme. Il applique la méthode du cours, de la plus grande valeur à la plus petite :

ex09.py
def en_binaire(n):
    texte = ""
    for puissance in [128, 64, 32, 16, 8, 4, 2, 1]:
        if n >= puissance:
            texte = texte + "1"
            n = n - puissance
        else:
            texte = texte + "0"
    return texte


print(en_binaire(155))
  1. Quel est le résultat pour en_binaire(155) ? Compare avec le cours.
  2. Teste avec 66, 78 puis 200. Compare avec l'exercice 4.
  3. Que se passe-t-il pour en_binaire(256) ? Pourquoi ?
  4. Modifie la fonction pour qu'elle fonctionne avec 16 bits (jusqu'à 65 535). Teste avec 1000.
Indice 1

Pour 16 bits, la liste commence à 32768 : 32768, 16384, 8192…

Indice 2

Pour 256 : le programme essaie de retrancher des valeurs, mais la plus grande vaut 128.

💾 NOM_Prenom_ex09.py

EX 10Je m'entraîne 🌶️🌶️🌶️plusieurs étapes

Exercice 10 — Du binaire au décimal, en Python

Cette fonction convertit un texte de 0 et de 1 en nombre. À chaque chiffre lu, on double le nombre obtenu, puis on ajoute le chiffre :

ex10.py
def en_decimal(texte):
    n = 0
    for chiffre in texte:
        n = 2 * n + int(chiffre)
    return n


print(en_decimal("10011011"))
  1. Exécute le programme. Retrouve-t-on 155 ?
  2. Complète à la main le tableau de l'évolution de n pour "1011" : 0, puis après le chiffre 1, puis après 0, puis après 1, puis après 1. Quel est le résultat ?
  3. Pourquoi « doubler » à chaque chiffre fonctionne-t-il ? (pense à l'exercice 5)
  4. Écris est_pair(texte) qui renvoie True si le nombre binaire texte est pair, sans le convertir. Teste avec "1010010" et "1001111".
Indice

Pour la question 4, regarde seulement le dernier chiffre : texte[-1] ou texte[len(texte) - 1].

💾 NOM_Prenom_ex10.py