Système de numération
1. Introduction
Les informations traitées par un ordinateur peuvent être de différents types (texte, nombres,
etc.) mais elles sont toujours représentées et manipulées par l’ordinateur sous forme binaire.
L’unité d’information est le chiffre binaire (0 ou 1), que l’on appelle bit (pour binary digit :
chiffre binaire). Toute information sera traitée comme une suite de 0 et de 1.
Le codage d’une information consiste à établir une correspondance entre la représentation
externe de l’information, et sa représentation interne dans la machine.
2. Les systèmes de numérotation
Habituellement, on utilise la base 10 pour représenter les nombres, c'est-à-dire que l’on écrit à
l’aide de 10 symboles distincts, les chiffres.
En base b, on utilise b chiffres. Notons ai la suite des chiffres utilisés pour écrire un nombre
x = an an−1 ...a1 a0)b
a0 est le chiffre des unités.
– En décimal, b = 10, ai ∈ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ;
– En binaire, b = 2, ai ∈ {0, 1} : 2 chiffres binaires, ou bits ;
– En hexadécimal, b = 16, ai ∈ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }
(on utilise les 6 premières lettres comme des chiffres).
– En octal, b = 8, ai ∈ {0, 1, 2, 3, 4, 5, 6, 7} ;
3. Représentation des nombres entiers
En base 10, on écrit par exemple 1996 pour représenter le nombre
1996 = 1x103 + 9x102 + 9x101 + 6x100
Dans le cas général, en base b, le nombre représenté par une suite de chiffres
an an-1 ...a1 a0 est donné par :
n
an an−1 ⋯ a1 a0 )𝑏 = ∑ ai bi
i=0
a0 est le chiffre de poids faible, et an le chiffre de poids fort.
Exemple :
en base 2 (101)2 = 1x22 + 0x21 + 1x20
La notation .)b indique que le nombre est écrit en base b.
1
3.1. Passage d’une base quelconque à la base 10
Il suffit d’écrire le nombre comme ci-dessus et d’effectuer les opérations en décimal.
Exemple
111011)2= 1 x 25 + 1 x 24 + 1 x 23 + 0 x 22 + 1 x 21 + 1 x 20 = 59)10
73)8 = 3 x 80 + 7 x 81 = 59)10
3B)16 = B x 160 + 3 x 161 = 59)10
59)10 = 5 x 101 + 9 x 100 = 59)10
3.2. Passage de la base 10 vers une base quelconque
On procède par divisions successives. On divise le nombre par la base, puis le quotient obtenu
par la base, et ainsi de suite jusqu’à obtention d’un quotient nul.
La suite des restes obtenus correspond aux chiffres dans la base visée :
Exemple
12)10 = (1100 )2 59)10 = (111011 )2
59 2
12 2 1 29 2
0 6 2 1 14 2
0 3 2 0 7 2
1 1 2 1 3 2
1 0 1 1 2
1 0
1964)10 = (3654 )8 59)10 = (3B )16
1964 8 59 16
4 245 8 B 3 16
5 30 8 3 0 16
6 3 8
3 0
2
La correspondance entre base 16, 8, 2 et 10 est indiquée dans le tableau suivant :
Base 10 Base 2 Base 8 Base 16
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10
17 10001 21 11
3.3. Relation entre les nombres binaires et les nombres octaux
Chaque chiffre octal correspond à un nombre binaire de 3 chiffres, donc un nombre en octal
se converti en binaire en remplaçant chaque chiffre octal par son équivalent binaire composé
de 3 chiffres. Ces équivalents sont les suivants ceux du tableau ci-dessus.
La conversion inverse (binaire-octale) s’effectue en groupant les bits du nombre binaire 3 par
3 de droite à gauche et en prenant les équivalents en octal de chaque groupe.
3
Exemple
Binaire (101 111 100 001)2 Octal (3 6 2)8
Octal ( 5 7 4 1)8 Binaire (011 110 010)2
Remarque
La conversion du décimal en binaire est plus rapide en passant par l’octale :
Décimale octale binaire décimale octale
- Le passage décimal-octal se fait par division par 8
- Le passage octal-binaire se fait en éclatant les chiffres octaux en leurs
équivalant binaires.
3.4. Relation entre les nombres binaires et les nombres hexadécimaux
Ce système présente les mêmes avantages que le système octal, mais il correspond à un
groupe de 4 chiffres binaires équivalents qui sont données dans le tableau ci-dessus.
La conversion hexadécimale-binaire se fait en éclatant chaque chiffre hexadécimal en son
nombre binaire équivalent sur 4 bits.
La conversion inverse (binaire-hexadécimal) s’effectue en groupant les bits du nombre binaire
4 par 4 chiffres de droite à gauche et les remplacé par le chiffre hexadécimal correspondant.
Exemple
Binaire (1101 0010 1100)2 Hexadécimal (1 A F 3)16
Hexadécimal ( D 2 C)16 Binaire (0001 1010 1111 0011)2
Remarque
- La conversion du décimal en binaire est plus rapide en passant par l’hexadécimal.
- Le passage de la base octale à la base hexadécimale (et vis versa) s’effectue en passant par la
base décimale ou la base binaire.
4
3.5. Arithmétique binaire
Les opérations binaires sur les nombres binaires s’effectuent de la même façon que sur les
nombres décimaux. L’addition, la soustraction, la multiplication et la soustraction s’effectuent
en binaire en respectant les tables d’opérations suivantes :
Table de
Table d’addition Table de soustraction Table de division
multiplication
0+0=0 0–0=0 0x0=0 0/1=0
0+1=1 1–0=1 0x1=0 1/0=1
1+0=1 1–1=0 1x0=0
1 + 1 = 0 avec retenue 0 – 1 = 1 avec retenue 1 x 1 = 1
1 + 1 + 1 = 1 avec 10 – 1 = 1
retenue
Exemples
1010 + 310 = ?2
5910 + 1210 = ?2
5
15610 + 8710 = ?2 = 24310
1010 -310 = ?2
5910 – 1210 = ?2
5910 x 1210 = ?2
6
910 x 510 = ?2
11/3=( ?)2
13/4=( ?)2
4. Représentation des nombres entiers sur machine
La représentation (ou codification) des nombres est nécessaire afin de les stocker et manipuler
par un ordinateur. Le principal problème est la limitation de la taille du codage : un nombre
mathématique peut prendre des valeurs arbitrairement grandes, tandis que le codage dans
l’ordinateur doit s’effectuer sur un nombre de bits fixé.
On rencontre habituellement des codages sur 1, 2 ou 4 octets, plus rarement sur 64 bits. Avec
n bits on a 2n combinaisons possibles de 0 et 1.
7
4.1. Signe + valeur absolue
En écriture courante, la représentation algébrique consiste à représenter le nombre par sa
valeur absolue précédée de son signe de la manière suivante : S valeur absolue.
Le bit de tête, le plus à gauche, est réservé au signe du nombre : il contient 0 si le nombre est
positif et 1 s’il est négatif.
On peut ainsi avec un nombre de n bits, coder des entiers positifs ou négatifs N tels que :
(2 n1 1) N (2 n1 1) .
Exemple :
Si on accorde 8 bits pour représenter un nombre algébrique, il sera codé comme suit :
Bit de signe valeur absolue du nombre
Le bit le plus à gauche est réservé au signe du nombre, les sept bits restants permettent la
représentation des nombres N tels que :
-127 < N < 127 (27 = 128)
Cette méthode représente les inconvénients suivants :
Le zéro possède deux représentations distinctes 000….0 et 10000….0 soit 0 ou -0.
Les tables d’addition et de multiplication sont compliquées, à cause du bit de signe qui doit
être traité à part.
4.2. Représentation 2 : complément à 2
La représentation en complément à 2 de x sur n bits est définie de la façon suivante :
Si x >= 0, la représentation est obtenue en appliquant la représentation des entiers
naturels en base 2.
Si x < 0, la représentation est obtenue de la façon suivante :
- on code en binaire sa valeur absolue
- on calcule son complément à 1
- on ajoute 1
Le complément à 1 de x ou encore complément restreint de N (Cr(x)) est obtenu en
complémentant bit par bit la représentation de x c'est-à-dire remplacer 1 par 0 et 0 par 1.
8
Exemple : - Le complément à 1 de 1011 est 0100.
- Le complément à 1 de 0100 est 1011.
- Le complément à 1 de 1010 est 0101.
Représentation du complément à 2 de x ou encore complément vrai de x (Cv(x)) en ajoutant 1
au Cr(x).
Exemple : - Le complément à 2 de 1011 est 0100 + 1 = 0101.
- Le complément à 2 de 0100 est 1011 + 1 = 1100.
- Le complément à 1 de 1010 est 0101 + 1 = 0110.
Ainsi on obtient la représentation de (-x) sur un mot de n bits.
Exemple :
- Représenter (-5)10 sur 8 bits.
510 0 0 0 0 0 1 0 1
Cr(5) 1 1 1 1 1 0 1 0
+ 1 1
Cv(5) 1 1 1 1 1 0 1 1
- Représenter (-13)10 sur 16 bits.
1310 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1
Cr(13) 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0
+ 1 1
Cr(13) 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1
Cas général : Avec un mot de n bits, l’intervalle des entiers positifs ou négatifs que l’on peut
n 1 n 1
représenter est : 2 x (2 1)
Donc on peut représenter des entiers positifs compris entre 0 et (2n-1-1) et des entiers négatifs
compris entre -1 et (-2n-1).
4.3. 0pérations arithmétiques
En utilisant le complément à 2, les opérations arithmétiques sont avantageuses. En effet, la
soustraction d’un nombre se réduit à l’addition de son complément. Pour soustraire deux
nombres binaires, il suffit d’ajouter le Cv du nombre à soustraire : A – B = A + Cv(B)
9
Propriétés du complément à 2
Cv( x ) + x = 0
Cv ( Cv ( x ) ) = x
Exemple :
Calcul de 7 – 3 sur 8 bits.
7 0 0 0 0 0 0 0 1 1 1
3 0 0 0 0 0 0 0 0 1 1
7-3 0 0 0 0 0 0 0 1 0 0
Autrement : 7 – 3 = 7 + Cv(3)
Cv(3) = Cr(3) + 1
3 0 0 0 0 0 0 1 1
Cr(3)
1 1 1 1 1 1 0 0
Cv(3)
1 1 1 1 1 1 0 1
7 0 0 0 0 0 1 1 1
7+Cv(3)
0 0 0 0 0 1 0 0
Effectuer l’opération (1010 -610) en utilisant le système de codage en complément à 2
sur un octet.
1010 -610 = 1010 + (-610) = 1010 + Cv(610)
610 0 0 0 0 0 1 1 0
Cr(6) 1 1 1 1 1 0 0 1
1 1 1 1 1
Cv(6) 1 1 1 1 1 0 1 0
1010 0 0 0 0 1 0 1 0
1010+Cv(6) 1 0 0 0 0 0 1 0 0 = 410
bit de débordement bit de signe = 0
à ignorer le résultat est un entier positif
10
Effectuer l’opération (610-1010) en utilisant le système de codage en complément à 2
sur un octet.
1010 0 0 0 0 1 0 1 0
Cr(10) 1 1 1 1 0 1 0 1
1 1
Cv(10) 1 1 1 1 0 1 1 0
610 0 0 0 0 0 1 1 0
610+Cv(10) 1 1 1 1 1 1 0 0
bit de signe = 1
le résultat est un entier négatif
La représentation d’un nombre négatif ne nous permet pas de déduire directement sa valeur.
Elle nous donne uniquement une idée sur le signe.
Pour déterminer la valeur exacte, on doit déterminer le Cv du résultat.
610+Cv(10) 1 1 1 1 1 1 0 0
1 1
Cr 0 0 0 0 0 0 1 1
+ 1
Cv(610+Cv(10)) 0 0 0 0 0 1 0 0
Cv(610+Cv(10)) = 1002 = 410
D’où 610-1010 = - 410
4.4. Débordement
Avec une représentation sur 3 bits on ajoute deux entiers. Que se passe-t-il si on a un résultat
plus grand que 3 ou plus petit que -4 ?
Par exemple 3 + 2 = 5
011
+ 010
= 101
Le résultat est absurde (il est négatif), il y a eu débordement. Il faut donc s'assurer que les
opérations arithmétiques qu'on effectue restent dans les limites des représentations.
On distingue trois cas :
- somme d'un entier positif et d'un entier négatif : le résultat obtenu est nécessairement
correct car la somme est dans l'intervalle des nombres représentables. Il peut y avoir
débordement sur le (n +1)ème bit mais on peut l'ignorer.
11
- somme de deux entiers positifs : le résultat est correct si et seulement si la somme est
inférieure ou égale à 2n-1 -1 (le plus grand nombre positif que l'on peut représenter).
Ceci correspond à ne pas déborder sur le nème bit, c'est-à-dire à produire un 0 (qui
représente les nombres positifs) sur le nème bit.
- somme de deux entiers négatifs : le résultat est correct si et seulement si la somme bit
à bit produit un 1 (qui représente les nombres négatifs) sur le nème bit. On peut vérifier
que ceci correspond à imposer que la somme des deux nombres négatifs soit
supérieure ou égale -2n-1, le plus petit nombre négatif que l'on peut représenter. A
nouveau, le débordement sur le (n + 1)ème bit doit être ignoré.
5. Représentation des nombres fractionnels (réels)
Les nombres fractionnaires sont ceux qui comportent des chiffres après la virgule.
Dans le système décimal, on écrit par exemple :
12,346 = 1x101 + 2x100 + 3x10-1 + 4x10-2 + 6x10-3
En général, en base b, on écrit :
an an-1 ...a1 a0 , a-1 a-2 ...a-p = anxbn +an-1xbn-1 +...+a0xb0 +a-1xb-1 +...+a-pxb-p
n
an an−1 ⋯ a1 a0 , a−1 a−2 ⋯ a−p = ∑ ai bi
i=−p
5.1. Passage d’une base quelconque à la base 10
Il suffit d’écrire le nombre comme ci-dessus et d’effectuer les opérations en décimal.
Exemple :
123,45 = 1 x 102 + 2 x 101 + 3 x 100 + 4 x 10-1 + 5 x 10-2
(101,101)2 = 1 x 22 + 0 x 21 + 1 x 20 + 1 x 2-1 + 0 x 2-2 + 1 x 2-3
= 4 + 0 + 1 + 0,5 + 0 + 0,125
= 5,625
(AB,4E)16 = 10 x 161 + 11 x 160 + 4 x 16-1 + 14 x 16-2
= 160 + 11 + 4 x 0,0625 + 14 x 0,00390625
= 171,3046875
12
5.2. Passage de la base 10 vers une base quelconque
On multiplie la partie fractionnaire par la base en répétant l’opération sur la partie
fractionnaire du produit jusqu’à ce qu’elle soit nulle (ou que la précision voulue soit atteinte).
Pour la partie entière, on procède par divisions comme pour un entier.
Exemple :
conversion de 12,6875 en binaire
Conversion de 12 : donne (1100)2
Conversion de 0,6875 :
0,6875 x2 = 1,375 = 1 + 0,375 0,375 x2 = 0,75 = 0 + 0,75
0,75 x 2 = 1,5 = 1 + 0,5 0,5 x2 =1 =1+0
(12,6875)10 = (1100,1011)2
conversion de 171,3046875 en hexadécimal
Conversion de 171 :donne (AB)16
Conversion de 0,3046875
0,3046875 x 16 = 4,875 = 4 + 0,875
0,875 x 16 = 14,0 = 14 + 0
(171,3046875)10 = (AB,4E)16
5.3. Représentation des réels à virgule fixe
Les réels sont représentés avec une partie entière et une partie fractionnaire séparées par un
point. La partie entière ou la partie fractionnaire peuvent être omises, mais pas toutes les deux
en même temps.
Exemple: 12.71, -0.31, -.38, 4., .27
5.4. Représentation des réels à virgule flottante
Identique à la virgule fixe avec en plus un facteur d'échelle une puissance de la base.
La représentation en virgule flottante consiste à représenter les nombres sous la forme
suivante :
x = M * bE
avec b : la base de numération (2, 8, 10, 16)
M : Mantisse
E : Exposant
: codage du signe : positif ou négatif
13
Exemple :
Des représentations approchées de sont :
= 0.031 * 102
= 3.142 * 100
= 0.003 * 103
et on voit qu'elles ne donnent pas la même précision. Pour éviter ce problème et garder la
meilleure précision, on utilisera une mantisse normalisée.
Lorsque la partie entière de la mantisse est dans l’intervalle [0..b[, la représentation est dite en
virgule flottante normalisée.
Exemple : représentation en base 10
N = 3,5
= 35.10-1
= 3,5.100
= 0,35.101
= 0,035.10+2
Ce sont tous des représentations en virgule flottante de N, mais une seule d’entre elles est
normalisée : N = 3,5.100.
6. Représentation des réels sur machine
Les ordinateurs n’ont pas de virgule au niveau de la machine. On traite donc ces nombres
comme des entiers, avec une virgule virtuelle gérée par le programmeur. Ce dernier doit donc
connaître et faire évoluer, au cours des opérations, la place de la virgule.
La représentation des réels dans la machine se fait selon des normes spécifiant le nombre de
bits de chaque partie de la représentation en virgule flottante (mantisse, exposant, etc.).
La représentation d’un nombre réel nécessite la représentation :
du signe de la mantisse
de la valeur de la mantisse
de la valeur de l’exposant
signe Eb : exposant biaisé M : mantisse normalisée
mantisse
1 bit p bits q bits
14
Soit x = ± 1,M . 2E
Le signe de la mantisse est codé sur 1 bit ayant le poids fort :
signe -: bit = 1
signe + : bit = 0
Exposant biaisé (Eb)
placé avant la mantisse
codé sur p bits et biaisé pour être positif (E = Eb - (2p-1-1))
Mantisse (M)
M est codé sur q bits
6.1. Norme IEEE simple précision
C’est une représentation sur 32 bits répartis de gauche à droite comme suit :
- 1 bit de signe de la mantisse
- 8 bits pour l’exposant
- 23 bits pour la mantisse
S Eb M
1 bit 8 bits 23 bits
6.2. Norme IEEE double précision
C’est une représentation sur 64 bits répartis de gauche à droite comme suit :
- 1 bit de signe de la mantisse
- 11 bits pour l’exposant
- 52 bits pour la mantisse
Eb M
1 bit 11 bits 52 bits
Exemple :
35,5)10 = ?)IEEE 754 simple précision
Nombre positif, donc S = 0
35,5)10 = (100011,1)2 (virgule fixe)
= (1,000111 x 25)2 (virgule flottante)
Exposant = Eb-127 = 5 donc Eb = 132 = 10000100)2
1,M = 1,000111 donc M = 00011100
La représentation machine de 35,5)10 est :
01000010000011100000000000000000)IEEE 754 SP
15
0 1000000 111100000000000000000000)IEEE 754 SP = ?)10
S=0 donc nombre positif
Eb = 129 donc exposant = Eb-127 = 2
M = 111
+ 1,111 . 22)2 = 111,1)2 = 7,5)10
16