Présentation
Ce cours va tenter de répondre à une question qui vous a peut-être déjà effleuré : comment une machine peut-elle représenter des nombres (entiers -positifs ou négatifs-, réels) ou des caractères ?
Pour répondre à cette question, nous allons devoir (ré)apprendre à compter comme le fait la machine, en rappelant à cette occasion les différentes notions liées aux bases de représentation des nombres. Nous verrons ensuite comment coder les informations de signe et de virgule.
Travail à effectuer
Ces pages sont un mélange de cours et d'exercices. Après avoir lu les paragraphes constituant le cours, une série d'exercices vous sera proposée.. Après avoir répondu à un exercice, un nouvel exercice sera généré (que vous ayez répondu correctement ou non). En cas de réponse incorrecte, la solution vous sera donnée.
Les exercices résolus correctement au moins une fois sont identifiés à l'aide du symbole suivant : ✓
Les exercices qui n'ont pas encore été résolus correctement au moins une fois sont identifiés à l'aide du symbole suivant : ✗
Ces informations étant stockées dans la zone de stockage local du navigateur, elles ne seront pas conservées si vous changez de machine, de compte utilisateur ou de navigateur.
Un peu d'histoire...
Les premiers ordinateurs électroniques sont apparus dans les années 40. Le transistor restant encore à inventer, ils utilisaient des tubes à vide (communément appelés lampes) pour effectuer les opérations demandées. Parmis les plus connus de ces précurseurs, L'ENIAC (1946) comportait 18000 tubes à vide et pesait 30 tonnes pour une capacité de mémoire de 20 nombres de 10 chiffres et une puissance de calcul permettant d'effectuer 5000 opérations par seconde (contre plusieurs milliards sur les ordinateurs modernes). Pour programmer ces "monstres", il fallait manipuler des milliers d'interrupteurs et de câbles et, de temps à autre, remplacer les tubes ayant "grillé" lorsque des insectes commettaient l'erreur (fatale) de vouloir se réchauffer contre eux. |
Pour stocker un chiffre décimal (0 à 9), on utilisait alors 10 bascules (composées chacune de 2 lampes), dont une seule à la fois était active :
Cette méthode de représentation était assez inefficace, puisque n'utilisant à un moment donné que 10% des ressources dédiées à la mémorisation d'un chiffre. Un autre mode de représentation, déjà utilisé par certains concurrents de l'ENIAC, s'est rapidement imposé : le binaire, autrement dit la représentation en base 2 :
Dans ce mode de représentation, 10 bascules permettent de représenter 1024 valeurs différentes, au lieu de 10 auparavant. Par contre, la base 2 n'est pas naturelle pour l'être humain, habitué à compter en base 10.
Pour interpréter le résultat d'un calcul, il est donc nécessaire d'en obtenir une représentation en base 10. Inversement, pour fournir des données à un programme, nous préfèrons la plupart du temps les entrer sous forme décimale. Pour que ces données soient utilisables par un ordinateur travaillant en binaire, une étape de conversion est également nécessaire.
Le système décimal
Pour que vous compreniez le fonctionnement du binaire, et des systèmes de comptage en général (plus communément appelés bases), je vais commencer par faire une petite réintroduction à la base 10 que vous connaissez tous.
En effet, tout le monde sait compter en base 10 (décimal). Mais comment ça marche ? Comment est construit notre système ? Pour répondre à cette question à l'apparence simple, oubliez tout et reprenons depuis le début : comment avez-vous appris à compter à l'école ?
Vous penserez peut-être que la base 10 vient du fait qu'on a 10 doigts, mais en tout cas deux choses sont sûres :
- Il y a 10 chiffres : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
- Avec ces derniers, on peut compter jusqu'à 9.
Et si l'on veut aller au-delà de 9, il faut changer de rang.
Cela signifie que si le rang des unités est plein, il faut passer à celui des dizaines, puis des centaines, milliers et j'en passe.
Par exemple : à 19, le rang des unités est "saturé" (plein), car il contient le chiffre 9, et il n'y a pas (dans la base 10) de valeur plus élevée. Il faut donc incrémenter le rang périphérique puis réinitialiser l'état de celui des unités. Ce qui signifie : j'ai 19, je ne peux pas mettre plus de 9 à droite, donc j'ajoute 1 à celui de gauche et je remets à zéro celui de droite.
Comme je disais tout à l'heure, le nombre entier va être composé de rangs (unités, dizaines, centaines, etc). Chaque rang vaut le rang précédent multiplié par l'indice de la base. Une centaine vaut dix dizaines, et une dizaine vaut 10 unités. Par exemple, dans l'image ci-dessus, on peut voir le nombre 18510 (ici, le 10 signifie qu'il s'agit d'un nombre, en base 10). Dans ce nombre, on peut voir trois rangs : centaines, dizaines et unités. Pour n'importe quelle base, la valeur d'un rang est égale à bn, où b est l'indice de la base (ici, 10) et n la position du rang. Ici, les unités ont la position 0, les dizaines la position 1 et les centaines la position 2. Nous pouvons donc écrire :
Le binaire, c'est le système de comptage des ordinateurs. Pourquoi le binaire et pas le décimal comme les humains ? Et bien c'est très simple : un ordinateur est composé de circuits électroniques, et donc de composants électriques. Le plus simple pour compter est donc d'utiliser un système en base 2 (le binaire) car on peut représenter ses deux valeurs possibles (0 et 1) par un signal électrique : 1, y'a du courant, 0, y'en a pas (c'est la version simple). Je vous ai parlé ci-dessus de rangs. En binaire, c'est pareil à la différence qu'on utilise le terme bit, qui est la contraction de "binary digit", littéralement "chiffre binaire".
Par exemple, le nombre Combien de valeurs peut-on coder avec 1 bit ? Combien de valeurs peut-on coder avec 2 bits ? Combien de valeurs peut-on coder avec 3 bits ? Combien de valeurs peut-on coder avec n bits ? Comme on a pu le voir, compter jusqu'à 10 ou 20 reste aisé, mais imaginons un instant que je vous demandasse d'écrire 185 en binaire ? Vous allez faire chaque rang, un par un ?Le binaire (partie copiée sur le site de David Roche :
10011
occupe 5 bits.
Là où tout se complique, c'est que comme je l'ai expliqué, chaque rang en binaire ne peut avoir que deux valeurs (binaire = base 2) différentes : 0 ou 1.
Pour la base 10, chaque rang représente une puissance de 10, pour la base 2, chaque rang occupe une puissance de 2.
Voici comment compter en binaire jusqu'à 10 :
Retenez juste ceci : entamer le rang suivant quand l'actuel est plein.
Nombre en décimal
Nombre en binaire
Le pourquoi du comment
0
0
Pour l'instant, ça va.
1
1
Là encore, c'est simple.
2
10
Le premier rang ayant été rempli, on passe au suivant !
3
11
On re-remplit le rang 1.
4
100
Le rang 2 est plein, le rang 1 aussi, qu'à cela ne tienne, on passe au suivant.
5
101
On continue en suivant la même méthode.
6
110
7
111
8
1000
On commence le rang 4.
9
1001
On continue comme tout à l'heure.
10
1010
...
À faire vous-même 1
Rappel : bases de représentation des nombres
base nom symboles exemples
10 décimal 0 1 2 3 4 5 6 7 8 9 10295 13,48
2 binaire 0 1 101101 101,11
16 hexadécimal 0 1 2 3 4 5 6 7 8 9 A B C D E F 4AC9 B1,D6
exemples : (10295)10 (101101)2 (724)8 (4AC9)16
Binaire : base 2
-› en utilisant plusieurs bits :
Poids fort / poids faible
Soit C un nombre dont la représentation dans une base b comporte n chiffres notés Cn-1 , Cn-2 , ... , C2 , C1 , C0 :