La représentation des informations

Le codage en machine

Le codage des informations en machine est basé sur la numération binaire car c'est facile de coder 2 états dans un circuit électrique ou électronique : ex.: on / off, alimenté / non alimenté, polarisé positivement / polarisé négativement, tension 0V / tension 12V, tension -5V / tension 5V

Ceci permet la représentation directe des nombres en binaire (en base 2), en utilisant les chiffres 0 et 1 (qu'on appelle en informatique des bits, du mot anglais signifiant petit morceau).

Pour une manipulation plus commode, ces bits sont organisés en mots de N bits : octets (mot de 8 bits ; en anglais byte), mots de 16, 32, 64 bits, qui servent à représenter des informations numériques.

Les nombres entiers positifs s'écrivent directement, par exemple :

0 → 0, 10 → 1010, 123 → 1111011

Les nombres entiers négatifs sont représentés en complément à 2 (sur N chiffres binaires); par exemple, 8 bits permettent de représenter 256 valeurs, c'est-à-dire les nombres positifs de 0 à 255, ou bien les nombres naturels de -128 à +127

00000000 → 0, 00000001 → 1, 01111111 → 127, 11111111 → -1, 11111110 → -2, 10000000 → -128

Les nombres décimaux sont représentés en virgule fixe. Une partie des chiffres binaires représente la partie entière, l'autre partie la partie fractionnaire. Le nombre de chiffres après la virgule est figé (d'où le nom de 'virgule fixe'), et de même la précision des nombres représentés.

exemple : sur 32 bits, 24 bits de partie entière et 8 bits de partie fractionnaire, permettront de représenter des nombres de 0 à 224-1, avec une précision fixe de 1/256.

Les nombres réels sont représentés en virgule flottante, avec 3 parties : le signe, l'exposant et la mantisse. Un nombre est calculé comme :

N = signe × 2exposant × 1,mantisse

C'est l'équivalent en binaire de la notation scientifique des nombres, telles qu'on peut la voir sur une calculatrice (123.45 = 1.2345 × 102) et cela permet de représenter dans un nombre raisonnable de bits, des nombres très grands ou très petits avec une assez bonne précision, mais avec une précision variable. En effet, et c'est ce qui explique le terme de virgule flottante, si l'on représente des grands nombres (en valeur absolue), ce sera au détriment du nombre de chiffres après la virgule; à l'inverse, de petits nombres (toujours en valeur absolue) pourront être représentés avec beaucoup de chiffres après la virgule.

La plupart des machines actuelles utilisent une arithmétique flottante normalisée (norme IEEE 754) dans laquelle les nombres réels (on dira souvent nombres flottants) sont codés sur 32 bits en simple précision (resp. 64 bits en double précision) ont 1 bit de signe, 8 bits d'exposant (-127..128), 23 bits de mantisse (resp. 1 bit de signe, 11 bits d'exposant (-1022 à 1023), 52 bits de mantisse).

Il faut se rendre compte que le codage en machine ne permet pas de représenter tous les nombres mathématiquement existants - c'est une propriété du codage numérique (voir La numération binaire) de ne pouvoir représenter qu'un monde discret, c'est-à-dire constitué de valeurs distinctes en nombre fini, alors que le monde réel, lui, est continu, c'est-à-dire qu'entre 2 valeurs quelconques existent une infinité de valeurs. Il s'ensuit que les calculs seront presque toujours des calculs approchés : ainsi, le développeur de logiciels effectuant des calculs numériques, devra toujours se poser la question de la précision, et pourra se heurter à des problèmes de débordement (de la capacité de représentation, de la capacité de stockage, etc.). Pour l’utilisateur de logiciels, la question ne se pose a priori pas, sauf cas particulier : par exemple, en France, il est illégal d'effectuer des calculs monétaires en virgule flottante, mais en virgule fixe afin de garantir que le calcul est juste au centime près quelle que soit la somme.

La représentation des caractères (lettres, chiffres, signes de ponctuation, etc.) utilise une table de correspondance qui associe à chaque caractère un code numérique.

Le plus connu est le code ASCII (American Standard Code for Information Interchange), créé en 1961 et utilisé pour les transmissions de données; il permettait de coder sur 7 bits les lettres de l'alphabet en majuscules et minuscules, les chiffres, quelques signes de ponctuation, ainsi que des caractères de contrôle qui étaient interprétés par les terminaux pour gérer la communication.

C'est toujours lui qui est utilisé dans votre PC, mais sous la forme d'une extension à 8 bits, qui a doublé la capacité de codage et permis d'introduire des caractères accentués, des lettres grecques, des symboles, selon la page de code utilisée (en effet l'utilisation des 128 caractères supplémentaires n'a pas été normalisée assez tôt et diverses variantes se sont développées). De plus, afin de représenter les caractères des différentes langues du monde, il existe désormais des jeux de caractères dits multilingues ou wide characters, codés sur plus de 8 bits, jusqu'à 16 bits, ce qui permet de représenter 65536 caractères.

Kilo, mega, giga, et compagnie

Pour indiquer les capacités, les performances, des ordinateurs ou des systèmes informatiques, on utilisera bien sûr les unités d'information décrites ci-dessus, et leurs multiples :

Petite subtilité tout de même dans le monde de l'informatique : comme la numération binaire est la règle de par les calculs internes en base 2, les informations ne seront pas organisées en paquets de 10, 100, 1000, etc. mais dans des multiples en base 2, plus commodes pour les manipulations en machine.

Ainsi, les kilo informatiques ne vaudront pas 1000 mais 1024 soit 210, les mega non pas 1000000, mais 1024 × 1024 soit 220, et ainsi de suite.