INTRODUCTION
Les informations traitées par l’ordinateur sont de différents types (textes, sons,
nombres, images…), mais elles sont toujours présentées à la base, sous forme binaire.
Une information élémentaire correspond donc à un chiffre (0 ou 1), appelé bit (vient de
BInary digiT). Une information plus complexe, comme un nombre ou un caractère,
correspond à un ensemble de bits. (exemple : 7 correspond à 111, B correspond à 1000010)
Le codage d’une information consiste à établir une correspondance entre sa
représentation externe (externe par rapport à la machine, une représentation comprise par
l’homme) et sa représentation interne (propre à la machine, une suite de bits).
I. SYSTÈME DE NUMÉRATION
A1 01 10 03 06 01 12 A3 01 14
Les données sont les opérandes sur lesquels portent les opérations (traitements), ou
produits par celles-ci. On distingue deux types de données : les données numériques et les
données non-numériques.
Il existe d’autres codes, sur 16 bits, permettant de coder tous les caractères qui
puissent exister. (exemples : UNICODE, UTF-16 etc.)
exemple :
Remarque :
Pour l’ASCII :
Entre 0 et 31, les codes ne représentent pas de caractère, ils ne sont pas affichables. ce
sont des caractères de contrôle pour la gestion interne de l’ordinateur (aller à la ligne :
CR = 13), Bip sonore (BEL = 07).
De 65 (A) à 90 (Z), les LETTRES MAJUSCULES (41 – 5A en hexadécimal)
Les codes 48 – 57 (30h – 39h) correspondent aux chiffres (0 – 9), et le chiffre de poids
faible (en hexadécimal, 30 = 0, … 39 = 9) définit la valeur du chiffre en décimal. Les 4 bits
de poids faible du code binaire définissent donc la valeur en binaire du chiffre.
NB : L’opération qui permet de passer d’un code à un autre est le transcodage.
2. Les données numériques
Remarque : Lorsque dans une base b le résultat d’une opération est supérieur ou égal à b, la
différence avec le plus grand multiple de la base inférieur au résultat est écrite, et le reste en
multiple de la base est avancé comme retenue au rang supérieur.
Changement de base
o Base b → décimal : on additionne les puissances de la base affectées de leur
coefficient.
Exemples :
- b=2 : 1011012 = 25+23+22+20 = (45)10
- b = 8 : 2538 = 2x82+5x81+2 = 17110
- b = 16 : 1BACD16 = 1.164+11.163+10.162+12.16+13 = 113 35710
o Décimal → base b :
L’une de trois méthodes peut être utilisée :
Dans un registre ou emplacement mémoire à n positions, tout entier signé est codé
comme suit : la position de poids fort code le signe et le reste de positions permet de
coder la valeur du nombre.
Note : Tout entier positif est toujours codé par conversion direct dans la base considéré
quelque soit la méthode.
Exemple : Codez sur 8 bits les nombres -32, -17, et 511 en SVA :
-32 < 0 ⟹ MSB (Most Significant Bit) = 1, et |-32| = 32 = 25 = 100000
Donc, -32 = 101000002
NB : En SVA, pour n bits, on ne peut coder que l’entier signé N / -(2 n-1-1) ≤N ≤ +2n-1 – 1 ;
Ainsi dans le cas ci-dessus, on ne peut représenter que les entiers de -255=-(27-1) à 255=27-1
Pour les entiers N négatifs, le complément logique se fait par inversion de chaque
chiffre de |N| écrit dans la base considérée sur n digits : l’inverse de x dans la base b étant (b-
1)-x.
On peut également, sur n positions, faire bn-( |N|+1) et convertir le résultat dans b.
Exemples :
①Coder +12, -17 et -32 en C1 sur 8 bits
NB : En Cb-1, sur n positions on ne peut coder que les entiers relatifs N, tels que
-( (bn/2) - 1) ≤ N ≤+ ((bn/2) - 1)
exemple :
Coder +12, -17, -32 en C2
Solution : +12 → 00001100 (C2)
-32 → 11011111 (C1) → 11100000 (C2)
NB : En Cb, sur n digits on ne peut coder que les entiers relatifs N, tels que
-(bn/2)≤ N ≤ (bn/2) – 1
11/10/2016
b
NB : Tout nombre codé en Cb-1 ou en Cb est négatif si le digit de poids fort ≥ et il est positif
2
sinon.
L’extension se fait avec F ou 0 selon le cas.
Exercice : -2325 en C1 (abus de langage pour C15), en C2 (abus de langage pour C16) et en
hexadécimal, n = 4.
6EAC1 / 6EBC2 overflow : ce nombre n’est pas codable sur 3 positions, car on obtient le
code d’un nombre positif (bit de poids fort = 6 < 8) .
En revanche, sur 4 et 6 positions, on a FFFF – 0915 = F6EAC15 +1 → F6EBC16;
Sur 6 digits par extension on FFF6EA et FFF6EB : sinon faire FFFFF – 000915.
-128 sur 8 bits en C1 → impossible, car sur 8 bits on ne peut représenter que les entiers allant de
-127 à +127, et -128 n’appartient pas à cet intervalle. (-127
-128 sur 8 bits en C2 → On pourrait penser que c’est impossible, puisque le C 1 l’est ; pourtant -128
appartient à l’intervalle des nombres codables en C2 sur 8 bits [ -128, 127 ].
Pour coder -128 en C2, comme il n’est pas représentable en C1,
soit fait -128= -127 + (-1) et l’on code en C1 puis on passe en C2 ,( -127=10000001 et -1= 11111111
C2; ( la retenue de l’addition est ignorée))
soit on code normalement 28 – | -128| = 12810 = 28 = 10000000 en C2.
Exemple : Donner la valeur décimale du nombre signé dont la représentation en C15 est
8B1 en hexadécimal ; même question pour 5EA en C16.
Solution :
8B1 : N < 0 car 8 ≥ 16/2
8B1 → 74E (inversion) = |N| en hexa et en décimal |N| = 1870 d’où N = -1870.
octal : 32 = 0040
-30 = 7741Cb-1 somme → ① 0001 → + 1 → 0002
hexadécimal : 32 = 0020
-30 = FFE1 somme → ① 0001 → + 1 → 0002
octal : 32 = 0040
-30 = 7742C8 somme → ① 0002 soit 2.
hexadécimal : 32 = 0020
-30 = FFE2 somme → ① 0002
En Cb, il y a overflow lorsque les retenues générées par le chiffre du signe et celui juste
avant sont différentes. Le résultat est plus grand que l’opérande de destination.
Solution :
-3 = 101C2 ; -1 = 111 ; somme = 100 (on omet la retenue) : dernière et avant-dernière
retenue égales ( = 1 ) donc il n’y a pas overflow.
On dit aussi qu’il y a overflow lorsque le résultat signé d’une opération est incorrecte :
comme la somme de deux entiers signés de même signe qui donne un résultat de signe
contraire (cas de -4 – 1 = 011 > 0).
Si e est codé sur k bits, alors le biais = 2k-1 - 1 et l’exposant effectif est E = e – biais.
Exemple : Coder 3,5 sur 8 bits avec e codé sur 3 bits et m sur 4 bits.
N = 3,5 = 011,12
= 0,111 x 22
= M BE
Or e = E + biais
biais = 23-1-1 = 3
donc, e = 2 + 3 = 5 = 101 ! (overflow ; il faut 4bits pour coder 5 qui serait alors 0101)
sm ? N > 0 ⟹ sm = 0 ; d’où la représentation 00101111
Dans la norme IEE 754, les nombres réels à virgule flottante se représentent comme suit :
s e f
(signe) (exposant (partie
) fractionnaire)
Les mots mémoire des processeurs actuels étant de 32 et 64 bits, la représentation en simple
précision se fait sur 32 bits, et double précision sur 64 bits. On a le tableau suivant :
Solution :
+125,5 = 1111101,1 = 1,1111011 x 26
Archi –Représentation (codage) de l’information 9
s = 0 car N > 0; exposant = 127 + 6 = 133 = 10000101 ; mantisse = 1111011
N = 010000101111101100000000000000
-75,875 = ?
75,875 = 1001011,111 = 1,001011111 x 26
signe = 1 car N < 0 ; exposant = 127 + 6 = 133 = 10000101 ; mantisse =
001011111
N = 11000010100101111100000000000000
Exercice : Retrouver le nombre décimal dont la représentation suivant la norme IEEE 754 en
simple précision est 11001011110110…0
Solution
s = 1 ⟹ N < 0;
e = 10010111 = 150 ⟹ E = 150 – 127 = 23;
f = 10110…0 = 1011 ; la représentation étant à bit perdu f est la partie fractionnaire de la
mantisse, on M=1,f) :
d’où |N|= 1,f x 2E = 1,1011 x 223 = 1,6875 x 223
= 14 155 776
⟹ N = -14 155 776 = -1,4155776 x 107
Note:
o 0 est codé par m et e nuls, il est non normalisée.
o Un exposant nul indique, soit une valeur nulle (si la mantisse est égale à 0), soit une très
petite valeur.
o Un exposant composé que du plus grand chiffre de la base indique soit la représentation
d’une valeur infinie (positive ou négative), soit celle d’aucun nombre non valide, un
NaN(Not a Number) ; il peut être utilisé pour se rappeler qu’une variable n’a pas été
initialisée, ou pour signaler des erreurs de calculs, comme la division par zéro à
l’appréciation de l’utilisateur.
Exercice : Retrouver les valeurs Emin et Emax du tableau ci-dessus.