La numération binaire pour représenter des données


Aurélie Lagoutte

La mémoire d'un ordinateur permet de stocker uniquement des 0 et des 1. Pourtant, malgré cette restriction, on y enregistre aujourd'hui des nombres, des textes, des photos, et même des vidéos. Cet encodage se fait à l'aide de multiples normes et conventions qu'il vaut mieux connaître.

Gottfried Wilhelm Leibniz est surtout connu, en mathématiques, pour sa contribution au développement du calcul différentiel et intégral dans les années 1670. Ses compétences ne se limitaient cependant pas uniquement aux mathématiques. On lui doit en particulier d’importants travaux en philosophie, en philologie et en logique. Il s’intéresse ainsi à la représentation des nombres dans une base « minimale », la base 2, qui ne fait intervenir que deux symboles : 0 et 1. Après ses travaux théoriques en 1703 et ceux du Britannique George Boole en 1854, de solides bases mathématiques faisaient apparaître le système binaire comme puissant système de représentation de données.

De même que le système décimal désigne l’écriture des nombres à partir de dix chiffres différents (0, 1, 2, 3, 4, 5, 6, 7, 8 et 9), le système binaire tient son nom du fait qu’une unité élémentaire d’écriture ne peut avoir que deux valeurs différentes : 0 ou 1. Un chiffre binaire est appelé un bit, contraction de l’anglais binary digit.

Gottfried Wilhelm Leibniz (1646–1716).                      George Boole (1815–1864).


De la théorie aux circuits électriques

C'est l'Américain Shannon qui, en 1937, fait passer le système binaire de la théorie vers la pratique : grâce à des relais, interrupteurs et fils électriques, il crée des circuits électroniques contenant toute la puissance du système binaire découvert par ses aïeux. En se fixant une tension « seuil », il est possible de distinguer les fils où passe le courant (tension au-dessus du seuil) de ceux où il ne passe pas (tension en dessous du seuil). Les premiers transmettent le bit 1 alors que les seconds transmettent le bit 0. 

Mais alors, comment trouver un sens à tous ces 0 et ces 1 ? Simplement grâce à des conventions adoptées par l'ensemble de la communauté informatique. Tout comme les espaces et la ponctuation permettent de délimiter les mots et les phrases, les ensembles de bits sont divisés en « blocs » de taille fixe sur chaque machine. Un bloc de huit bits est appelé un octet. Lire un octet en mémoire est similaire à lire un mot : il faut savoir dans quelle «langue «, selon quelle convention, il a été écrit.

La convention utilisée pour représenter les entiers positifs est très largement inspirée du système décimal : lorsque 2 456 représente la valeur 2 × 1 000 + 4 × 100 + 5 × 10 + 6 × 1, la suite de bits 1101 représente la valeur 1 × 8 + 1 × 4 + 0 × 2 + 1 × 1, c’est-à-dire 13. À chaque position correspond un poids, qui est une puissance de la base utilisée (10 pour le décimal, 2 pour le binaire) ; plus la position est « vers la gauche », plus l’exposant est élevé ; le chiffre présent à chaque position indique un facteur par lequel il faut multiplier le poids avant de le sommer avec le reste.

Il est ainsi possible de représenter n’importe quel entier positif en binaire, même si le nombre de bits à utiliser sera souvent bien supérieur au nombre de chiffres nécessaires en décimal : sur n bits, il existe 2n combinaisons différentes, qui encodent donc les entiers de 0 à 2n – 1. Par exemple, un octet peut représenter n’importe quel nombre entre 0 et 255, alors qu’en décimal la limite de huit chiffres nous permet tout de même d’écrire tous les entiers de 0 à 99 999 999.

 

Des normes et des notations

N’importe quel ordinateur peut également travailler avec des entiers relatifs. Mais comment sont-ils encodés ? Contrairement au cas des entiers positifs, aucune convention n’a réussi à cumuler tous les avantages souhaités ; par conséquent, plusieurs conventions coexistent. La plus simple consiste à rajouter un bit supplémentaire à gauche du nombre pour indiquer si le signe est négatif (avec un 1) ou positif (avec un 0). Ainsi, pour écrire –70 sur un octet, il suffit de commencer par écrire 1 comme bit de signe (pour le signe « moins »), suivi de l’écriture de 70 en binaire : 1100 0110. Cette convention est très simple à comprendre, mais malheureusement elle rend les additions très compliquées. En pratique, c’est donc souvent une autre convention plus adaptée aux calculs, appelée notation en complément à 2, qui est utilisée.

En ce qui concerne les nombres réels, c’est une norme appelée IEEE 754 qui s’est imposée. Elle s’inspire de la notation scientifique : l’écriture – 2,347 × 102 pour désigner
– 234,7 est imitée par l’écriture – 1,01101 × 23 pour désigner – 1011,01. Tout comme le chiffre des dixièmes en notation décimale représente le poids 10–1, le premier bit après la virgule représente quant à lui le poids 2–1, le suivant 2–2, etc. Sur l’exemple précédent, 1011,01 vaut donc 1 ×  24 + 0 ×  23 + 1 ×  21 + 1 ×  20 + 0 ×  2–1 + 1 ×  2–2 = 11,25.

L’écriture – 1,01101 × 23 permet de décomposer le nombre en trois parties : le signe, codé sur un bit comme précédemment ; l’exposant, ici égal à 3, souvent codé sur huit bits ; et la mantisse, ici 1,01101, souvent codée sur vingt-trois bits. Cela permet d’obtenir une granularité de précision proportionnelle à l’ordre de grandeur du nombre représenté. Cette écriture est appelée en virgule flottante car la virgule est « déplacée » par rapport à sa position initiale et c’est l’exposant qui compense ce déplacement ; et par abus de langage, le mot flottant est souvent utilisé pour parler d’un nombre réel en informatique.

Parmi les données les plus essentielles à stocker, outre les nombres, se trouve le texte, qui n’est finalement rien d’autre qu’une suite de caractères (lettre, ponctuation…). L’écriture d’un texte en binaire relève d’une méthode des plus élémentaires : à chaque caractère est associé un numéro, via une table commune de correspondance entre caractère et numéro ; lors de l’encodage d’un texte, chaque caractère est remplacé par l’écriture binaire de son numéro. La table de correspondance la plus connue est l’ASCII (American Standard Code for Information Interchange, code américain normalisé pour l’échange d’information). Par exemple, le numéro du caractère A dans la table ASCII est 65, son écriture sur sept bits est donc 100 0001.

Les codes ASCII n’utilisant que sept bits, seul un jeu restreint de cent vingt-huit (soit 27 ) caractères fait partie de la table : lettres majuscules et minuscules, signes de ponctuation, une poignée de symboles mathématiques et quelques caractères spéciaux (par exemple, le retour à la ligne). Sous forte influence anglophone, cela était suffisant dans les premières décades de l’informatique. Cependant, l’existence de caractères propres à certaines langues (comme « à » ou « ç » en français) ont poussé à étendre la  table ASCII sous diverses déclinaisons nationales incompatibles entre elles, provoquant par la suite de nombreux problèmes de décodage : qui n’a jamais vu un affichage erroné des caractères accentués, comme par exemple goa»ta© à la place de goûté ?

Ces dernières années, c’est le standard international Unicode qui est en train de s’imposer comme table universelle, visant à pouvoir représenter tout caractère de n’importe quel système d’écriture.

 
Séquencer et découper l’information

Quelle que soit l’information à représenter grâce à une séquence finie de bits, il suffit donc de mettre en place une convention de représentation qui est connue par tous les interlocuteurs : ainsi, une image est découpée en pixels, petits carrés de couleur unie. Il suffit donc de s’accorder au départ sur la numérotation des couleurs et sur l’ordre dans lequel on écrira le code couleur de chaque pixel. Ainsi, il est possible d’envoyer une image sous la forme d’une suite de bits. Cette méthode se généralise naturellement aux vidéos, qui sont des suites finies d’images.

Ainsi, le système binaire s’est imposé en informatique : il permet de coder tous les formats de données actuels, malgré les contraintes technologiques des systèmes de mémoire.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Lire la suite