Rappel sur le codage de l'information en binaire

Conversion de la base 10 aux bases 2 et 16

Un nombre en base 10 peut s’écrire par exemple sous la forme 345,112. On distingue en base 10 la partie entière, (qui correspond aux puissances supérieures à zéro de 10) et la partie fractionnaire (qui correspond aux puissances négatives de 10).

Ainsi, 345,112 = 3 ∗ 102 + 4 ∗ 101 + 5 ∗ 100 + 1 ∗ 10-1 + 1 ∗ 10-2 + 2 ∗ 10-3.

On constate que les « digits » correspondent aux poids de chaque puissance de 10.

Pour transformer un nombre de la base 10 vers la base 2, on commence par coder la partie entière. Pour cela, on utilise le principe de la division entière. Ainsi, si A et B sont deux entiers, alors A/B donne un entier Q avec un reste entier R. On divise successivement le nombre par 2 jusqu’à ce qu’il n’y ait plus que 0 dans le quotient Q. Les restes sont les bits recherchés. Le premier reste est le bit de poids faible (le plus à droite) et le dernier reste est le bit de poids fort (le plus à gauche). Pour coder la partie fractionnaire en base 2, on multiplie par 2. Le nombre (0 ou 1) qui passe en partie entière est le bit de poids fort. On recommence avec ce qui reste.

Par exemple, coder 0,625 en base 2 :

0,625 x 2 = 1,250 → 1 est le poids fort (le plus à gauche)

0,250 x 2 = 0,500 → 0 est le poids suivant

0,500 x 2 = 1,000 → 1 est le poids faible (le plus à droite)

Deux bases jouent, en plus du binaire, des rôles importants chez les informaticiens : la base 8 (octal) où les chiffres possibles sont 0, 1, 2, 3, 4, 5, 6, 7 et l’hexadécimal (base 16) où les symboles sont 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.

On constate que 23 = 8 et que 24=16. Pour convertir rapidement un binaire en base 8, on fait des paquets de 3 en commençant par la gauche de la virgule pour la partie entière et à droite de la virgule pour la partie fractionnaire. On procède de même pour une conversion de binaire vers la base 16 avec des paquets de 4

Pour finir un paquet, on complète par des 0. Un paquet de trois bits correspond à un nombre entre 0 et 7 et un paquet de 4 bits correspond à un nombre entre 0 et 15

Addition et multiplications en binaire

Le mécanisme de l’addition en base 2 est absolument identique à l’addition en base 10. On additionne chaque puissance de 2 identiques dans ce que l’on appelle un étage. Il est possible qu’il y ait une retenue (qui vient de l’étage précédent c'est-à-dire de l’étage de droite). Pour un étage, le total varie entre 00 (zéro) et 11 (trois). On pose le bit de poids faible et on retient le bit de poids fort pour l’étage suivant

La multiplication en binaire est très simple car la table de multiplication est très courte! Le mécanisme est le même qu’en décimal. Une multiplication est une suite d’additions.

Représentation des entiers

Dans tous les ordinateurs, tous les langages de programmation, les données de type entier (integer) sont codées de la même façon. Par exemple avec 8 bits, on peut représenter 2_ valeurs différentes, soit 256 entiers.

Les codages classiques se font sur 2, 4, 8 octets. Contrairement à un programme comme Mathématica ou Maple, il n’y a pas d’adaptation dynamique de la taille à la valeur dans les langages informatiques classiques (C, Visual Basic, java…).

Le signe (négatif ou positif) est porté par le bit de poids fort (bit de signe). Un nombre positif a comme bit de signe 0 et un nombre négatif a un bit de signe égal à 1. La valeur 0 est codée avec un comme bit de signe.

Pour coder un nombre positif, on fait une conversion de la base 10 en base 2 et on recopie bêtement sur 8, ou 16, ou 32 bits en complétant par des zéros les poids forts non utilisés.

Pour coder un nombre négatif, on commence par coder sa valeur absolue (positive !) sur N bits. Ensuite, on détermine son complément à 1 en remplaçant les 1 par des 0 et des 0 par des 1. Enfin, on ajoute arithmétiquement au résultat la valeur 1 : c’est le complément à 2. On obtient le codage du nombre négatif.

Représentation des réels (norme IEEE754.2)

Les nombres réels (real, float) ont eu dans l’histoire des ordinateurs plusieurs représentations différentes, voire d’une marque à l’autre (IBM, BULL,...). Début des années 80, une norme a été fixée.

Un nombre réel est, en base 10, défini par trois éléments : le signe, la mantisse et l’exposant. Dans notre utilisation habituelle, on peut écrire par exemple 245.5 ou 2.455*102 ou encore 2455*10-1.

Il y a donc plusieurs représentations externes possibles. La représentation interne est unique.

Nous prenons comme exemple la représentation la plus simple sur 32 bits. Codons le nombre décimal −118,625 en utilisant le mécanisme IEEE 754.

  1. Premièrement, nous avons besoin du signe, de l'exposant et de la partie fractionnaire.
    C'est un nombre négatif, le signe est donc "1".

  2. Puis nous écrivons le nombre (sans le signe) en binaire. Nous obtenons 1110110,101.

  3. Ensuite, nous décalons la virgule vers la gauche, de façon à ne laisser qu'un 1 sur sa gauche :
    1110110,101 = 1,110110101 × 26.
    C'est un nombre flottant normalisé : la mantisse est la partie à droite de la virgule, remplie de 0 vers la droite pour obtenir 23 bits. Cela donne :
    1101101 0100 0000 0000 0000 (on omet le 1 avant la virgule, qui est implicite).

  4. L'exposant est égal à 6, et nous devons le convertir en binaire et le décaler. Pour le format 32-bit IEEE 754, le décalage est de 127. Donc 6 + 127 = 133 (décimal) = 1000 0101 (binaire).
    Le décalage est toujours de 127 sur 32 bits.

On a donc −118,625 (décimal) = 1100 0010 1110 1101 0100 0000 0000 0000 (binaire).

Autres représentations de données

Les caractères

Les caractères ont été représentés de façon très simple en utilisant le code ASCII sur 7 puis sur 8 bits, ce qui a permis d’avoir 128 caractères différent puis 255 en ajoutant le 8ème bit.

La table qui suit représente la table des codes sur 7 bits. Cette table présente les LSB (Least significant bit ou bits de poids faibles) et MSB (Most significant bit ou bits de poids fort).

Les codes de 0 à 31 sont des codes spéciaux (dits « non imprimables ») et correspondent à des caractères utilisés en télétransmission (notre ancêtre du réseau).

Il existe maintenant l’UNICODE qui permet de coder n’importe quel système d’écriture (chinois, arabe, grec, indien,…) et n’importe quel symboles (mathématiques, musique …). Il s’agit d’un codage dont la dernière mise à jour a été faite en janvier 2012. Cela vous permet d’envoyer en chinois et de recevoir un courrier en chinois. Ce n’était pas le cas dans les années 90 !

Les images

Les images sont des tableaux de points colorés appelés « Pixels ». Très classiquement, un pixel est représenté sur 24 bits : 8 bits pour le rouge, 8 bits pour le vert et 8 bits pour le bleu.