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 »).
Un octet est un groupe de 8 bits.
Avec n bits, on peut écrire 2ⁿ valeurs différentes (1 bit : 2 valeurs ; 2 bits : 4 ; 3 bits : 8…).
Avec un octet, on peut donc écrire 2⁸ = 256 valeurs, de 0 à 255. Tu l'as déjà rencontré : les trois nombres d'une couleur rouge–vert–bleu (thème Photographie numérique).
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 :
Position
8e
7e
6e
5e
4e
3e
2e
1re
Valeur de la position
128
64
32
16
8
4
2
1
Exemple : 10011011
1
0
0
1
1
0
1
1
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.
Valeur
128
64
32
16
8
4
2
1
155 − … reste
155 ≥ 128 : 1, reste 27
27 < 64 : 0
27 < 32 : 0
27 ≥ 16 : 1, reste 11
11 ≥ 8 : 1, reste 3
3 < 4 : 0
3 ≥ 2 : 1, reste 1
1 ≥ 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.)
A
B
C
D
E
F
G
H
I
J
K
L
M
65
66
67
68
69
70
71
72
73
74
75
76
77
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
78
79
80
81
82
83
84
85
86
87
88
89
90
a
b
c
d
e
f
g
h
i
j
k
l
m
97
98
99
100
101
102
103
104
105
106
107
108
109
n
o
p
q
r
s
t
u
v
w
x
y
z
110
111
112
113
114
115
116
117
118
119
120
121
122
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.
Il y a 5 oiseaux et des étiquettes de 5 cases. Propose une étiquette pour chaque oiseau.
Il y a 8 oiseaux et des étiquettes de 4 cases. Propose une étiquette pour chaque oiseau.
Il y a toujours 8 oiseaux, mais les étiquettes n'ont que 3 cases. Est-ce possible ? Écris toutes les étiquettes.
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.
Complète la liste. Aide-toi de la méthode du compteur : après 1 vient 10, puis 11, puis 100…
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 :
10011011
1010010
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 :
66
78
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
Convertis en binaire les nombres 10, 15, 30, 60, puis 20, 30, 60, 120.
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 ?
Explique cette règle avec les valeurs des positions.
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 ?
Quel est le plus grand nombre que l'on peut écrire avec un octet ? Quel est le plus petit ?
Combien de nombres différents peut-on écrire avec un octet ?
Combien de valeurs avec 10 bits ? Avec 16 bits ?
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.
Complète : B = 66 = ....... ; A = ...
Compare le code d'une majuscule et celui de la même lettre en minuscule. Que remarques-tu ?
Quel est l'écart entre les deux codes ? Pourquoi un seul bit change-t-il ?
Convertis chaque groupe de 7 bits en nombre décimal, puis en lettre avec la table ASCII. Quel est le message ?
Quelle lettre de ce message aurait dû porter un accent ? Pourquoi n'en voit-on pas ?
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
defen_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))
Quel est le résultat pour en_binaire(155) ? Compare avec le cours.
Teste avec 66, 78 puis 200. Compare avec l'exercice 4.
Que se passe-t-il pour en_binaire(256) ? Pourquoi ?
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
defen_decimal(texte):
n = 0for chiffre in texte:
n = 2 * n + int(chiffre)
return n
print(en_decimal("10011011"))
Exécute le programme. Retrouve-t-on 155 ?
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 ?
Pourquoi « doubler » à chaque chiffre fonctionne-t-il ? (pense à l'exercice 5)
É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].