Système binaire et encodage de caractères

Vous êtes-vous déjà demandé comment l’ordinateur fait pour représenter des lettres et des caractères spéciaux comme !, ?, &, *, $, s’il ne comprend et ne traite que des 0 et des 1? Et comment peut-il trier des listes de mots pour les mettre en ordre alphabétique? Dans cet article, vous apprendrez les bases du système binaire et de l’encodage de caractères, pour mieux comprendre le fonctionnement de l’ordinateur.

La représentation des nombres

Comme nous l’avons vu dans la [brève histoire de l’informatique]() de l’article précédent, l’ordinateur traite les données en utilisant le système binaire, soit un système de représentation des nombres avec seulement des 0 et des 1. Mais comment ce dernier fonctionne-t-il au juste?

Le système décimal (0 à 9)

Commençons par revoir le système que nous connaissons le mieux : le système décimal. Dans ce système de représentation des nombres, il existe neuf symboles pour représenter les chiffres 0 à 9. Lorsque l’on manque d’unités, par exemple pour représenter la valeur de 9 + 1, on ajoute le chiffre 1 à gauche et on ramène les unités à 0, en écrivant le nombre 10, ou dix en décimal. Cela veut dire qu’il y a maintenant « un paquet de dix unités ». La position des dizaines peut elle aussi avoir dix valeurs possibles, soit de 0 à 9. Lorsque l’on arrive à 99 et que l’on ajoute 1 (99 + 1), il n’y a plus de place dans les unités, ni dans les dizaines. On ajoute donc à nouveau un chiffre 1 à la gauche, puis on ramène les dizaines ainsi que les unités à 0, pour obtenir le nombre 100, ou cent en décimal. Cela veut dire qu’il y a maintenant « un paquet de cent unités ».

Au primaire, vous avez appris à décomposer les nombres en paquets de milliers, centaines, dizaines et d’unités. Par exemple, le nombre 5783 peut se décomposer de la manière suivante : 5 milliers, plus 7 centaines, plus 8 dizaines, plus 3 unités, ou : 5 X 1000 + 7 X 100 + 8 X 10 + 3 X 1 = 5783. Cette façon de représenter les nombres nous parait simple parce que nous l’utilisons depuis notre petite enfance.

Le système binaire (0 et 1)

Le système binaire fonctionne de la même façon, sauf qu’il n’y a seulement que deux symboles pour représenter les nombres : 0 et 1. Ainsi, pour représenter le chiffre deux, on manque déjà d’unités. Comme en décimal, il faut donc ajouter un 1 à gauche et ramener les unités à zéro : 10. Attention! En binaire, 10 représente la valeur deux, pas « dix » comme en décimal. Le chiffre un dans 10 représente « un paquet de deux » et le zéro représente « aucune unité ».

Si on ajoute un à deux, donc 10 + 1 en binaire, on obtient 11, soit un paquet de deux, plus une unité donc un total de trois. En binaire, le symbole 11 représente donc la valeur trois. Que se passe-t-il si l’on ajoute un à trois, donc 11 + 1 ? Il n’y a plus d’unités, ni de paquets de deux de disponibles. On fait donc comme en décimal et on ajoute un 1 à gauche, suivi de deux zéros, donc 100 qui représente « un paquet de quatre, aucun paquet de deux et aucune unité ».

Si dans le système décimal la valeur des positions est multipliée par dix chaque fois que l’on se déplace vers la gauche : unités, dizaines, centaines, milliers, etc., dans le système binaire la valeur des positions double en se déplaçant vers la gauche : un, deux, quatre, huit, seize, trente-deux, soixante-quatre et cent-ving-huit.

Avec un octet, soit un groupe de huit bits (0 ou 1), il est donc possible de représenter 256 valeurs différentes, soit de 0 à 255. La valeur 255 est atteinte lorsque les huit bits ont une valeur de 1 : 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1.

L’encodage de caractères

Le système binaire permet donc assez facilement de représenter des nombres avec seulement des zéros et des uns. Mais comment l’ordinateur peut-il représenter les lettres et tous les autres caractères? Il suffit de créer une table de correspondance entre certains nombres et des symboles. C’est le rôle de l’encodage de caractères. En faisant correspondre les lettres à des nombres, l’ordinateur sera aussi en mesure d’effectuer des tris basés sur des lettres, puisque ces dernières correspondront en fait à des nombres dans une séquence croissante. Voyons comment cela fonctionne.

La table ASCII

Dans les années 60, des ingénieurs des plus grandes sociétés informatiques de l’époque s’entendent sur un standard pour représenter les caractères de la même façon, afin qu’un système informatique soit capable de comprendre les caractères d’un autre système informatique. Ils créent alors une table de correspondance de caractères appelée ASCII (American Standard Code for Information Interchange).

La table ASCII est basée sur seulement 7 bits au lieu de 8. Elle permet donc d’encoder un maximum de 128 caractères au lieu de 256. Elle contient les vingt-six caractères de l’alphabet en majuscules (65 = A, 66 = B, etc.) et en minucules (97 = a, 98 = b, etc.), ainsi que des caractères spéciaux (32 = espace, 33 = !, 34 = #, etc.) Elle ne peut toutefois contenir les caractères accentués ou les lettres d’autres alphabets comme le grec, l’hébreu, le russe, etc. Et encore bien moins les milliers de symboles des langues asiatiques!

Les normes ISO sur 8 bits

L’ajout d’un huitième bit pour créer un octet double le nombre de caractères pouvant être représentés, passant de 128 à 256. Dans les années 70-80, une multitude de normes d’encodage sont créées de manière à représenter tous les alphabets possibles à partir d’un octet pouvant représenter 256 valeurs (ex.: ISO-8859-1 et autres). La plupart conservent la table ASCII comme point de départ pour être compatible avec celle-ci, mais elles utilisent ensuite les 128 autres valeurs disponibles pour représenter différents caractères. Selon les situations d’utilisation, cela mène parfois à des conflits qui font en sorte que du texte illisible apparaisse à l’écran, les caractères accentués étant parfois remplacés par d’étranges symboles.

Le standard Unicode et UTF-8

Dans les années 90 et jusqu’à aujourd’hui, un standard permettant des échanges de texte dans différentes langues, à un niveau mondial est créé. Il s’agit du standard Unicode. Unicode permet de représenter tous les caractères, de tous les alphabets, de toutes les langues et il continue d’évoluer. Sa dernière version date de mars 2019.

Sur le Web, le codage de caractères UTF-8, totalement compatible avec le standard Unicode, est utilisé par plus de 90 % des sites web. C’est l’encodage de caractères que nous utiliserons bientôt dans nos pages HTML.