Isn Codage
Isn Codage
fr
1 Introduction
Les ordinateurs, comme d’autres appareils, permettent de mémoriser, de transmettre et de trans-
former des nombres, des textes, des images, des sons, etc. Ils fonctionnent avec des petits circuits élec-
troniques qui ne peuvent être, chacun, que dans deux états représentés par 0 ou 1. Ce qui correspond à
fermé ou ouvert, faux ou vrai, . . .
Une telle valeur, 0 ou 1, s’appelle un booléen, un chiffre binaire (nombre en base 2) ou encore un
bit (binary digit). La mémoire des ordinateurs contient une multitude de ces circuits à deux états appelé
circuit mémoire un bit. Un circuit composé de plusieurs de ces circuits mémoire un bit, se décrit par
une suite finie de 0 et de 1, que l’on appelle un mot. Un mot de 8 bits est un octet.
Nous devons donc représenter l’information par des suites de 0 et de 1.
Pratiquement, si on dispose de 3207 objets identiques, et que l’on constitue des paquets de 10 objets, on
en obtient 320 et il reste 7 objets. Ensuite, avec les 320 paquets on forme des ensembles de 10 paquets,
on en obtient 32 ; puis on regroupe les 32 ensembles par 10, on obtient 3 groupes et il reste 2 ensembles.
On utilise la base dix tous les jours, mais d’autres bases sont envisageables.
47 = 23 × 2 + 1 = (11 × 2 + 1) × 2 + 1 = ((5 × 2 + 1) × 2 + 1) × 2 + 1 = . . .
47 = 1 × 25 + 0 × 24 + 1 × 23 + 1 × 22 + 1 × 21 + 1
Donc le nombre écrit 47 en base dix s’écrit 101111 en base deux. On peut utiliser la notation 1011112 .
Dans la notation binaire :
• le bit (ou chiffre) le plus à gauche est appelé bit de poids fort
• le bit (ou chiffre) le plus à droite est appelé bit de poids faible
Pour mesurer des quantité d’information, l’unité de base est le bit qui prend soit la valeur 0, soit
la valeur 1. Un ensemble de 4 bits consécutifs est appelé un quartet, un ensemble de 8 bits consécutifs
est appelé un octet (byte), deux octets consécutifs (16 bits) forment un mot (word).
C’est l’octet qui est utilisé comme unité de référence pour mesurer la capacité des mémoires.
Remarque : pour multiplier par deux un nombre écrit en base deux, il suffit d’ajouter un zéro à
droite du nombre :
10112 × 102 = 101102
Avec des octets, soit huit bits, on peut représenter les entiers naturels de 0 (00000000 en base
deux) à 255 (1111 1111 en base deux). Donc 59 sera représenté par 00111011.
Si on utilise seize bits, soit deux octets, on peut représenter les entiers naturels jusqu’à 65535
(1111 1111 1111 1111 en base deux) et dans ce cas 59 sera représenté par 0000000000111011.
Avec n bits, ce système permet de représenter les nombres entre 0 et 2n − 1, donc tout nombre k
qui s’écrit :
n−1
X
k= bi 2i bi ∈ {0, 1}
i=0
Avec deux octets, soit seize bits, on représente les entiers naturels n de 0 jusqu’à 65535 et donc
les entiers relatifs de −215 = −32768 à 215 − 1 = 32767 ; les nombres n de 0 à 32767, (de 0000 0000
0000 0000 à 0111 1111 1111 1111 en base deux), servent à représenter les entiers relatifs positif ou nul
r avec r = n et les nombres n de 32768 à 65535, (de 1000 0000 0000 0000 à 1111 1111 1111 1111 en
base deux), représentent les entiers relatifs négatifs r avec r = n − 65536 :
le nombre n = 32767 représente l’entier relatif r = 32767 ;
le nombre n = 32768 représente l’entier relatif r = 32768 − 65536 = −32768 ;
le nombre n = 65535 représente l’entier relatif r = 65535 − 65536 = −1.
Remarque 1 : tous les nombres négatifs ont leur bit de poids fort à 1, alors que les nombres
positifs ont leur bit de poids fort à 0.
Remarque 2 : si on est capable de faire effectuer par une machine l’addition de deux nombres et
le passage à l’opposé d’un nombre, on peut lui faire effectuer toutes les opérations classiques.
Un nombre est représenté sous la forme s m × 2n ou s est le signe du nombre, n son exposant et m
sa mantisse. Cette représentation est semblable à la notation scientifique des calculatrices, sauf qu’elle
est en base deux et non en base dix.
Le signe s est + ou −, l’exposant n est un entier relatif et la mantisse m est un nombre à virgule,
compris entre 1 inclus et 2 exclu. (En notation scientifique, c’est un nombre à virgule compris entre 1
inclus et 10 exclu).
Dans l’ordinateur les nombres seront alors codés par :
Par exemple, quand on utilise 64 bits pour représenter un nombre, on utilise 1 bit pour le signe, 11
bits pour l’exposant et 52 bits pour la mantisse.
• Le signe + est représenté par 0 et le signe − par 1.
• L’exposant n est un entier relatif compris entre −1022 et 1023 ; on le représente par l’entier
naturel n + 1023, qui est compris entre 1 et 2 046. Les deux entiers naturels 0 et 2 047 sont réservés
pour des situations exceptionnelles (+∞, −∞, NaN, etc).
• La mantisse m est un nombre binaire à virgule compris entre 1 inclus et 2 exclu, comprenant
52 chiffres apres la virgule. Comme cette mantisse est comprise entre 1 et 2, elle a toujours un seul
chiffre avant la virgule et ce chiffre est toujours un 1 ; il est donc inutile de le représenter et on utilise
les 52 bits pour représenter les 52 chiffres apres la virgule.
Les nombres à virgule flottante sont des approximations de nombres réels. En faisant varier l’ex-
posant n, on fait "flotter" la virgule décimale. Les différences de représentation interne des nombres
flottants d’un ordinateur à un autre obligeaient à reprendre les programmes de calcul scientifique pour
les porter d’une machine à une autre jusqu’à ce qu’un format normalisé soit proposé par l’IEEE. Les
flottants IEEE peuvent être codés sur 32 bits ("simple précision" avec 8 bits pour l’exposant et 23 bits
pour la mantisse) ou 64 bits ("double précision" avec 11 bits pour l’exposant et 52 bits pour la mantisse).
Précautions d’emploi :
On voit que l’espace est codé sur un octet par "20" en hexadécimal soit 32 en décimal (code
ASCII) ou 100000 en binaire, le "C" est codé par "43" en hexadécimal soit 67 en décimal (code ASCII)
ou 1000011 en binaire, etc. Ce fichier a une taille de 25 octets qui codent les 25 caractères.
4.2 Images
Une image sur un écran d’ordinateur est composée de pixels (picture elements). Ce sont des petits
carrés qui composent un quadrillage.
Si l’image est en niveau de gris, la couleur de chaque pixel est codée par un nombre de 0 à 255,
stocké sur un octet. Si l’image est en couleurs, trois paramètres codent le niveau de rouge, de vert et
de bleu. C’est le système RGB, (red, green, blue) ou système RVB en français. Chacune de ces trois
composantes est codée par un nombre de 0 à 255 stocké sur un octet. Le noir a pour composantes (0, 0,
0) codé 00 00 00 en hexadécimal, le blanc (255, 255, 255) codé FF FF FF en hexadécimal. Les couleurs
grises sont telles que R = G = B.
Il existe de nombreux formats pour les fichiers d’images (PNG, JPEG, GIF, EPS, TIFF, . . . ). Un
des formats les plus simples est BMP (BitMaP ) lisible par quasiment tous les visualiseurs et éditeurs
d’images.
La première partie du fichier, l’en-tête, contient les données relatives au fichier. Elle fournit des
informations sur le type de fichier (Bitmap), sa taille et indique où commencent les informations concer-
nant l’image.
L’en-tête du fichier est composé ainsi :
– la signature (sur 2 octets), indiquant qu’il s’agit d’un fichier BMP à l’aide des deux caractères.
Par exemple, "B M", ou "42 4D" en hexadécimal, indique qu’il s’agit d’un Bitmap Windows.
– la taille totale du fichier en octets (codée sur 4 octets). ("82" = 142 octets dans l’exemple ci-
dessous)
– un champ réservé, (sur 4 octets), pour l’identifiant de l’application qui a créé le fichier.
– l’offset de l’image (sur 4 octets), c’est-à-dire là où commencent les informations concernant
l’image. Dans l’exemple ci-dessous, "36" en hexadécimal nous indique que l’image commence
à l’octet 54.
La deuxième partie, l’en-tête de l’image, fournit des informations sur l’image, notamment ses
dimensions et ses couleurs.
L’en-tête de l’image est composée ainsi :
– la taille de l’en-tête de l’image en octets (sur 4 octets). Par exemple "28" en hexadécimal pour
Windows, soit 40 octets.
– la largeur de l’image (sur 4 octets), (le nombre de colonnes), puis la hauteur de l’image (sur 4
octets), (le nombre de lignes), (dans notre exemple ci-dessous, c’est une image 14 par 2 pixels).
La troisième partie, la palette de l’image, est optionnelle. Lorsqu’une palette est définie, elle
contient 4 octets représentant chacun la composante bleue, la composante verte, la composante rouge
et un champ réservé.
Le problème avec ce format, c’est qu’il n’y a aucune compression. Une image 800 par 600 pixels
en 24 bits a une taille de 800 × 600 × 3 = 1440000 octets, soit 1, 44 Mo.
4.2.2 Exemple
A partir de l’offset "36", on trouve les 14 pixels de la ligne inférieure, codés par "EE EE EE", "DD
DD DD", . . . , "11 11 11" qui correspondent à différents niveaux de gris (B = V = R).
Ensuite on a 2 octets nuls, "00 00", pour la fin de la première ligne de l’image car chaque ligne
doit être codée par un multiple de 4 octets. 14 pixels × 3 octets = 42 octets et on complète avec 2 octets
nuls pour obtenir un multiple de 4.
La deuxième ligne de l’image commence donc à l’offset "62" par "FF 00 00" pour bleu, puis "FF
FF FF" blanc, "00 00 00" noir, "FF FF FF" blanc, "00 00 FF" rouge, "FF FF FF" blanc, "00 FF 00" vert,
. . . , jusqu’au dernier pixel.
4.3 Sons
Un son est une variation de la pression de l’air au cours du temps. On peut représenter cela par
une fonction du temps qui est une combisaison de fonctions sinusoïdales.
Pour reproduire la courbe de l’exemple ci-dessus, il faut l’échantillonnner, c’est-à-dire prendre
des mesures à intervalles réguliers. Si on prend des mesures toutes les 0,1 ms, soit 300 mesures, cela
revient à 10000 mesures par seconde. On dit que l’on échantillonne à 10000 Hz (le "Herz" est une
mesure de fréquence). Pour un son de qualité, on échantillonne à 44000 Hz, car notre oreille peut
entendre des sons aigu jusqu’à 22000 Hz environ, et pour que la reconstitution du son soit fidèle, la
fréquence d’échantillonnage doit être au moins le double de la plus haute fréquence audible.
Par exemple pour les CD (disques compacts audio), la fréquence est fixée à 44,1 kilohertz, la
valeur numérique est codée sur 16 bits et prend donc une valeur entière entre -32768 et +32767.
Pour connaître la qualité numérique d’un enregistrement, il faut connaître ces deux valeurs : la
fréquence d’échantillonnage et le nombre de bits. Une fréquence trop faible coupera tous les aigus, un
codage sur trop peu de bits diminuera ’la finesse’ de l’enregistrement. Tout dépend de l’utilisation a
posteriori du signal (musique, dictaphone, radio, ...). On peut faire un parallèle avec les images numé-
riques, la fréquence s’approchant de la résolution et le nombre de bits du nombre de couleurs possibles ;
la taille de l’image en pixel se rapprochant de la longueur du morceau enregistré.
On distingue des encodages sans perte, par exemple le format "wav" et des compressions avec
perte, par exemple le format "mp3".
Le MPEG-1/2 Audio Layer 3, plus connu sous son abréviation de mp3, est un algorithme de
compression audio capable de réduire drastiquement la quantité de données nécessaire pour restituer de
l’audio, mais qui, pour l’auditeur, ressemble à une reproduction du son original non compressé : avec
une bonne compression la différence de qualité devenant difficilement perceptible même si c’est une
ompression destructive.
Le mp3 n’est pas une technologie gratuite, même si on peut coder ou décoder sa musique de
manière tout à fait légale ; cette technologie fait l’objet de brevets et d’une licence commerciale.
L’algorithme « MPEG-1 Layer 3 » est soumis à des redevances (droits commerciaux), en France
pour toute utilisation ou implantation physique (notamment sur les baladeurs MP3).
5 Exercices
5.1 Introduction
Exercice 1
On imagine un ordinateur dont la mémoire est constituée de quatre circuits mémoire un bit. Quel
est le nombre d’états possibles de la mémoire de cet ordinateur ? Même question pour un ordinateur
dont la mémoire est constituée de huit circuits mémoire un bit, ou seize circuits. Et pour un ordinateur
dont la mémoire est constituée de 34 milliards de tels circuits ?
Exercice 2
On veut représenter chacune des sept couleurs de l’arc-en-ciel par un mot, les sept mots devant
être distincts et de même longueur. Quelle est la longueur minimale de ces mots ? Et si on veut coder
256 couleurs ?
Exercice 4
Trouver les représentation en base cinq des nombres 44, 70, 126, 289.
Exercice 5
Trouver la représentation en base dix des nombres suivants écrits en base cinq : 11, 101, 444, 2341,
401302.
Exercice 6
Trouver la représentation en base deux des nombres 11, 100, 1000.
Exercice 7
Donner les représentations en base deux des nombres 1, 3, 7, 15, 31 et 63.
Expliquer le résultat.
Exercice 8
Trouver la représentation en base dix des nombres suivants écrits en base deux : 1010, 10000,
11111111, 10001000, 10010110, 11110010000.
Exercice 9
Montrer qu’avec un mot de n bits on peut représenter les nombres de 0 à 2n − 1.
Exercice 10
Pour multiplier par dix un entier naturel exprimé en base dix, il suffit d’ajouter un 0 à sa droite,
par exemple, 12 × 10 = 120. Quelle est l’opération équivalente pour les entiers naturels exprimés en
base deux ? Exprimer en base deux les nombres 3, 6 et 12 pour illustrer cette remarque.
Et comment fait-on pour multiplier par 4, 8 ou 16 un nombre écrit en base deux ?
Exercice 11
Quelle est la représentation binaire du nombre 57 ? Et celle du nombre 198 ?
Soit m un mot de 8 bits, n l’entier naturel représenté en binaire par le mot m, m0 le mot obtenu
en remplaçant dans m chaque 0 par un 1 et chaque 1 par un 0 et n0 l’entier naturel représenté en binaire
par le mot m0 .
Exprimer n et n0 comme une somme de puissances de 2, montrer que n + n0 = 255.
Montrer que la représentation binaire du nombre 255 − n est obtenue en remplaçant dans celle de
n chaque 0 par un 1 et chaque 1 par un 0.
Exercice 12
Trouver la représentation en base seize des nombres 17, 31, 965, 6725 et 18 379.
Exercice 13
Trouver la représentation en base dix des nombres suivants écrits en base seize : 12, A0, FF, 4E2C,
ABCD, 281EF.
Exercice 14
Trouver la représentation en base deux des nombres suivants écrits en base seize : 12, A0, C4, FF.
Exercice 15
Trouver la représentation en base seize des nombres suivants écrits en base deux : 10011, 1101001,
10101010, 10011001.
Dans la mémoire des ordinateurs les circuits mémoire un bit sont souvent groupés par huit : les
octets. On utilise souvent des nombres exprimés en notation binaire, sur un, deux, quatre ou huit octets,
soit 8, 16, 32 ou 64 bits. La notation en base seize permet de raccourcir simplement l’écriture de ces
nombres. Ecrire en base seize le nombre écrit 1010101010101010 en base deux.
Exercice 17
Trouver la représentation binaire sur huit bits des entiers relatifs 0, 64, 127, −127, −1 et −128.
Exercice 18
Trouver la représentation décimale des entiers relatifs dont la représentation binaire sur huit bits
est 0001 0001, 1000 1000, 0111 1111 et 1000 0001.
Exercice 19
Calculer la représentation binaire sur huit bits de l’entier relatif 4, puis celle de son opposé.
l’entier relatif r est compris entre 0 et 127, alors il est représenté sur huit bits par l’entier naturel p = r
et son opposé −r est représenté par l’entier naturel p0 = −r + 28 = −r + 256 = 256 − p. Si l’entier
relatif r est compris entre -127 et -1, alors il est représenté par l’entier naturel p = r + 28 = r + 256 et
son opposé −r est représenté par l’entier naturel p0 = −r = 256 − p.
Donc, sauf quand x = -128, dont l’opposé n’est pas représentable sur 8 bits, si un entier relatif r
est représenté par l’entier naturel p, son opposé −r est représenté par l’entier naturel p0 = 256 − p =
(255 − p) + 1. Calculer 255 − p = 11111111 − p est facile, puisqu’il suffit, dans la représentation
binaire de p, de remplacer chaque 0 par un 1 et chaque 1 par un 0. Il suffit ensuite d’ajouter 1 au nombre
obtenu.
Exercice 20
En appliquant la méthode ci-dessus, calculer la représentation binaire sur huit bits de l’entier relatif
-16, puis de son opposé.
Exercice 21
Montrer que le bit le plus à gauche vaut 1 pour les entiers relatifs strictement négatifs et 0 pour les
entiers relatifs positifs ou nuls.
Exercice 22
Représenter les entiers relatifs 96 et 48 en binaire sur huit bits. Ajouter les deux nombres binaires
obtenus. Quel est l’entier relatif obtenu ? Pourquoi est-il négatif ?
Exercice 23
Expliquer comment faire une soustraction de deux nombres binaires sur huit bits à partir du calcul
de l’opposé et de l’addition de deux nombres.
Calculer ainsi 15 - 7.
Exercice 25
Trouver le nombre à virgule représenté par le mot :
0001000000111101001110010101100000000000000000000000000000000000
Exercice 26
Comment est représenté le nombre à virgule 2−1022 (qui est égal à 2, 225 . . . × 10−308 ) ?
Exercice 27
Comment est représenté le nombre entier 7 ? Et le nombre à virgule 7,0 ?
Exercice 28
A combien de décimales environ correspondent 52 chiffres binaires après la virgule ?
Exercice 29
Quel est le plus grand nombre à virgule que l’on peut représenter en binaire ?
Quel est le plus petit nombre à virgule, donc négatif, que l’on peut représenter en binaire ?
Quel est le plus petit nombre à virgule strictement positif que l’on peut représenter en binaire ?
Exercice 30
Quelle précision perd-on si on divise par deux un nombre à virgule avant de le remultiplier par
deux ?
Exercice 31
A chaque multiplication de deux nombres à virgule, on arrondit le calcul en ne gardant que 52
chiffres binaires après la virgule, ce qui introduit une erreur relative de l’ordre de 2−52 . Quelle est la
valeur de cette erreur en base dix ?
Si on fait plusieurs multiplications, ces erreurs s’accumulent. Quelle est l’erreur relative d’un
calcul qui est formé d’un million de multiplications, qui dure quelques millisecondes sur un ordinateur
usuel ?
Exercice 32
On considère le programme suivant :
1 double x, y;
2 x = 1.0;
3 y = x + 1.0;
4 while (y - x == 1.0) {
5 x = x * 2.0;
6 y = x + 1.0;}
Si l’on calculait sur des nombres rationnels exacts, que se passerait-il lors de l’exécution de ce
programme ?
Expliquer ce qui va se passer si on exécute ce programme.
Exercice 33
On considère le programme suivant :
1 double a;
2 int n;
3 a = 0.0;
4 for (n = 1; n <= 10; n = n + 1) {
5 a = a + 0.1;
6 [Link](a);}
Si l’on calculait sur des nombres rationnels exacts, que se passerait-il lors de l’exécution de ce
programme ?
Vérifier que la représentation binaire de 0,1 est
0011111110111001100110011001100110011001100110011001100110011010.
Quel nombre décimal cette représentation désigne-t-elle en réalité ?
En déduire les représentations binaires de 0,2, 0,3 et les nombres décimaux que cette représentation
désigne en réalité.
Expliquer ce qui va se passer si on exécute ce programme.
Exercice 34
Trouver la représentation binaire en ASCII du texte "Je pense, donc je suis."
Exercice 35
Trouver le texte représenté en ASCII binaire par la suite de bits
010000110010011101100101011100110111010000100000
011001100110000101100011011010010110110001100101.
Exercice 36
Trouver le texte représenté en ASCII binaire par la suite de bits
001100000111010001100101011101000111010000110001.
Exercice 37
Trouver le texte représenté en ASCII hexadécimal par :
43 45 20 54 45 58 54 45 20 45 53 54 20 45 4E 20 4D 41 4A 55 53 43 55 4C 45 53 20 21
Exercice 38
Traduire en ASCII binaire une phrase de votre choix qui comporte des accents mais en les oubliant.
Traduire ensuite cette phrase en UTF-8 avec les accents.
Exercice 39
Traduire une phrase en ASCII binaire, puis la passer à son voisin qui la décode.