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.

Il vous sera parfois demandé d'écrire quelques lignes de code, qui vous seront proposées dans deux langages de programmation différents (Python et Javascript). Vous choisirez celui qui vous est le plus familier.

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.

ENIAC

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.

conversion

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 :

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 (partie copiée sur le site de David Roche :

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 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 :

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
...
Retenez juste ceci : entamer le rang suivant quand l'actuel est plein.

À faire vous-même 1

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 ?

Rappel : bases de représentation des nombres

base = nombre de symboles utilisables pour représenter un chiffre d'un nombre

basenomsymbolesexemples
10décimal0 1 2 3 4 5 6 7 8 910295 13,48
2binaire0 1101101 101,11
16hexadécimal0 1 2 3 4 5 6 7 8 9 A B C D E F4AC9 B1,D6
notation : (nombre)base
exemples : (10295)10 (101101)2 (724)8 (4AC9)16

Binaire : base 2

comment représenter des informations pouvant prendre plus de deux valeurs différentes ?
-› 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 :

C = (Cn-1Cn-2Cn-3...C2C1C0)b

en binaire, on parlera de bit de poids fort et de bit de poids faible