Vous êtes sur la page 1sur 23

Numération et codages

Ce document est destiné à présenter les principaux codages utilisés en informatique et en électronique numérique. Car si nous
autres humains comptons en décimal (base 10 : 0, 1, 2,…8, 9), les ordinateurs et autres circuits électroniques ne connaissent que le
binaire (0, 1) ; de plus, ils manipulent des mots binaires au format fini, c’est-à-dire composés d’un nombre de bits figé.
Ce document expose principalement la façon dont seront représentés par un ordinateur des nombres tels que 2003, -164
(entiers), -596.78095 ou 6,02.1023 (réels).

Table des matières


I. _______________________________________________________________ Introduction 2
A. ______________________________________________________________ Nombres et codes 2
B.___________________________________________________________ Qu’est-ce qu’un code ? 2
C. _______________________________________________________ Qu’est-ce qu’un nombre ? 2
D. ________________________________________________________ Contenu de ce document 2
II. ____________________________________________Systèmes de numération des entiers 4
A. ____________________ Les différentes bases numériques pour exprimer les entiers naturels 4
1. _______________________________________________________________La base décimale (base 10) 4
2. ____________________________________________________ Généralisation à une base quelconque B 4
3. __________________________________________________________ Le code Binaire Naturel (base 2) 4
4. ___________________________________________________________ La base hexadécimale (base 16) 6
B.________________________ Conversion d’un entier naturel de la base 10 vers une autre base 7
C. _______________________________ Codes binaires pour les entiers signés (nombres relatifs) 7
1. ________________________________________________________________ Rappel : complément à 1 7
2. ________________________________________________ Comment gérer le signe d’un nombre relatif ? 8
3. ______________________________________ Le code « Signe valeur absolue » (non utilisé en pratique) 8
4. ______________________________________ Le code « Complément à deux » (utilisé presque partout) 8
5. ___________________________________________________ Arithmétique binaire en complément à 2 10
6. ____________________________________________________ Le code Binaire décalé (utilisé parfois) 12
III. ______________________________________ Codage des nombres réels (« flottants ») 14
1. ____________________________________________ Codage « en virgule fixe » d’un réel inférieur à 1 14
2. __________________________________________________________ Nombres « à virgule flottante » 14
B._________________________________________________________________ Normalisation 15
__________________________________________________ Normalisation des réels en base 2 15
1. __________________________________________________Codage IEEE simple précision sur 32 bits 15
2. _________________________________________________ Codage IEEE double précision sur 64 bits 16
3. _________________________________________________________ codage précision étendue 80 bits 16
IV. _____________________________________________________ Autres codes binaires 17
A. ___________________________________________________________________ Code BCD 17
B.__________________________________________________________________Code de Gray 18
V. ______________________________________________________________ Conclusion 19
VI. ________________________________________________________________Annexes 20
1. __________________________________________________________________ Multiplication binaire 20
2. _______________________________________________________ Arithmétique des nombres flottants 23

IUT Cachan - GEii1 1 JSR, rév.AP - 2003


I. Introduction

A. Nombres et codes
Nous manipulons tous les jours des nombres et des codes. Par exemple, les quantités sont exprimées avec des nombres et la
monnaie est une occasion fréquente de manipuler des nombres. Par contre, le code secret d’une carte bancaire est fait de chiffres,
mais ce n’est pas un nombre : c’est un code. Un numéro de téléphone est aussi un code (pas un nombre), ainsi que le numéro de
sécurité sociale.
Dans tous ces exemples, les chiffres sont à la base de l’expression des nombres ou des codes. Nous acceptons assez
naturellement l’usage des chiffres pour exprimer des choses de nature finalement assez différentes (des nombres ou des codes). Les
chiffres utilisés sont ceux de la base dix (0,1, 2,…8,9).
Dans les ordinateurs, et plus particulièrement en électronique numérique, il se passe la même chose ; on utilise les chiffres
pour représenter des nombres et des codes ; la seule différence est qu’il s’agit des chiffres de la base deux (0 et 1).

B. Qu’est-ce qu’un code ?


Pour la carte bancaire, c’est un groupement de quatre chiffres (de la base dix). Pour le numéro de téléphone, c’est un
groupement de dix chiffres. Pour le numéro de sécurité sociale, on dispose de 13 chiffres.
Les chiffres composant le code sont ordonnés. Le nombre de chiffres est constant. Mais attention, n’importe quel groupement
de quatre chiffres ne donne pas un code valide pour une carte bancaire. Le code est fabriqué en respectant une technique particulière.
Par exemple, le numéro de S.S. est composé de plusieurs codes ou nombres ayant une signification particulière : code du sexe, année
et mois de naissance, codes du département et du lieu de naissance, numéro d’ordre de naissance. De même, les deux premiers
chiffres d’un numéro de téléphone correspondent à la zone géographique du correspondant ou au service.
On peut donc conclure que le code est une représentation signifiant quelque chose.
Un code est la représentation d’une signification
La relation entre le code et le sens qui lui est attribué est l’affaire d’une convention. Quand on connaît la convention de
codage, il est possible de procéder à un décodage ou plus simplement vérifier au moins si le code est valide. On sait par exemple que
le numéro de téléphone 14.33.22.01.45 n’est pas valide (les deux premiers chiffres ‘14’ ne correspondent à aucun code de zone ou de
service valide).
En électronique numérique, on utilise beaucoup de codes. Chaque système, chaque constructeur (de composant ou de
matériel), chaque organisme de normalisation, etc. invente un ou plusieurs codages. La seule chose à retenir, c’est qu’il faut avoir en
sa possession les conventions de codage. Par exemple, pour comprendre le langage de programmation d’un microprocesseur, il faut
avoir à sa disposition le manuel décrivant le jeu des instructions de ce composant.

C. Qu’est-ce qu’un nombre ?


Un nombre représente une valeur. Notre culture est telle que la manipulation des nombres est quasi naturelle.
Un nombre est la représentation d’une valeur
La valeur est représentée au moyen de chiffres écrits de façon ordonnée. La différence par rapport au code est que chaque
chiffre composant le nombre est porteur d’une valeur. Par exemple, le nombre 421 est composé du chiffre 4 qui représente la valeur
400, du chiffre 2 qui représente la valeur 20 et du chiffre 1 qui représente la valeur 1.
La convention qui permet d’attribuer une valeur à un chiffre s’appelle la pondération. Le 4 est pondéré par la valeur 100, le 2
par la valeur 10 et le 1 par la valeur 1. Les valeurs de pondération sont les puissances entières positives successives d’un nombre de
base (ici 10).
Les nombres sont formés à l’aide d’un code pondéré
Une même valeur peut être exprimée de différentes façons selon la base de pondération utilisée. On note (421)10 une valeur
exprimée en base 10. La même valeur exprimée en base 3 s’écrit (120121)3. Il s’agit bien de la même valeur. Si vous avez 421 € dans
votre porte-monnaie, vous avez (421)10 euros, bien sûr. Vous ne serez pas plus riche (malgré de trompeuses apparences) si vous
décidez de compter en base 3 ; certes vous compterez (120121)3, mais attention, il ne s’agit pas de cent vingt mille cent vingt et un
euros ... il faut plutôt dire « un deux un zéro deux un » euros en base 3.

D. Contenu de ce document
Le présent document est principalement centré sur les codes numériques utilisés en informatique (microprocesseurs,…) et en
électronique numérique (convertisseurs, compteurs, afficheurs… la liste est très longue).
Il commence par présenter les différentes bases numériques qui permettent de coder les entiers naturels, ainsi que les moyens
de passer d’une base à l’autre. On se limite aux bases utiles en électronique et en informatique : base 10, base 2 et base 16. On aborde

IUT Cachan - GEii1 2 JSR, rév.AP - 2003


ensuite les codes qui permettent de coder les entiers signés.
Puis sont présentés les techniques de codage des réels (représentation normalisée).
Enfin, le document aborde des codes ayant des propriétés particulières ; les codes BCD et de Gray.Le cours se termine par un
bref aperçu des calculs arithmétiques dans les machines binaires (en annexe).

IUT Cachan - GEii1 3 JSR, rév.AP - 2003


II. Systèmes de numération des entiers
Un système de numération est muni d’une base et de règles de composition des nombres. Voici quelques rappels
de ces notions.

A. Les différentes bases numériques pour exprimer les entiers naturels

1. La base décimale (base 10)


C’est la base de référence, car il suffit d’analyser comment nous gérons la base dix pour en déduire les autres
bases.
Un nombre est composé de chiffres (digit). Un chiffre est un symbole extrait d’un ensemble ordonné : la base dix.
base dix = { 0,1,2,3,4,5,6,7,8,9 }
Par exemple, N=1989 est l’écriture d’un nombre en base 10, qui sous-entend la décomposition suivante :
N = 1989 = 1x1000 + 9x100 + 8x10 + 9
10
De façon plus générale, les chiffres qui composent le nombre N dans la base 10 sont les coefficients ai de la
décomposition de N en somme de puissances de 10 (forme polynomiale) :

i=M
N = Σ a 10i M ∈ IN
10 i=0 i
On peut constater que :
• le rang ‘i’ d’un coefficient ‘ai’ est l’exposant de la puissance de dix qui lui est associée. Dans l’exemple avec
N=1989, a 3 = 1 car 1000=1 x 103.
• le chiffre de rang 0, c’est-à-dire le plus à droite, est appelé le chiffre (digit) de plus faible poids (LSD : Least
Significant Digit). Le chiffre le plus à gauche est le chiffre de plus fort poids (MSD : Most Significant Digit).

2. Généralisation à une base quelconque B


Soit la base B formée de :
base B = {0, 1, ...., B-1} avec B ∈ IN
Tout nombre entier naturel N peut s’exprimer en base B avec n chiffres ordonnés, sous la forme :
N = a ... a a
B (
n-1 1 0 )B
Cela signifie que le nombre N se décompose en somme de puissances de B (forme polynomiale), sous la forme :

i=n-1
N = Σ a Bi a ∈ base B, n ∈ IN et n>0
B i=0 i i

3. Le code Binaire Naturel (base 2)


Aussi appelé « binaire pur ».
base 2 = { 0,1 }
Une remarque pour commencer : le code binaire naturel est utilisé partout dans les ordinateurs. Mais attention,
l’électronicien ou l’informaticien préfère la base 16 (ou hexadécimale) à la base 2 : on peut dire que la base 16 est
« presque équivalente », car on passe très facilement de la base 16 à la base 2 et réciproquement (c’est dû au fait que 16
est une puissance de 2). Ce sera donc la base 16 qu’il faudra manipuler, de préférence à la base 2.
Reprenons notre code binaire naturel, avec un exemple : N2= (1011001)2. Que vaut ce nombre en décimal ?

IUT Cachan - GEii1 4 JSR, rév.AP - 2003


Les chiffres ‘0’ et ‘1’ sont ordonnés de gauche à droite, du MSD au LSD. Le développement de la forme
polynomiale associée fournit la valeur décimale du nombre écrit en binaire :
6 5 4 3 2 1 0
N = 1 . 2 + 0 . 2 + 1 . 2 + 1 . 2 + 0 . 2 + 0 . 2 + 1 . 2 = 89
10
Remarques :
• la taille d’un nombre binaire (le nombre de chiffres qui le composent) est 3 à 4 fois plus grande qu’en décimal.
D’où l’intérêt de la base hexadécimale, beaucoup plus compacte que la base binaire et qui s’en déduit facilement.
• on va tellement utiliser le binaire qu’il faut connaître, au moins, les 10 premières puissances de 2, et savoir
retrouver très vite le code des 8 premiers entiers:

20 1 binaire naturel dans


décimal
21 2 le format 4 bits
22 4 0 0000
23 8 1 0001
24 16 2 0010
3 0011
25 32
4 0100
26 64 5 0101
27 128 6 0110
28 256 7 0111
8 1000
29 512
79 1111

Vocabulaire :
• Les valeurs remarquables à connaître :
210 = 1024 se note k. Exemple : 1 ko (kilo octet) vaut 1024 octets.
220 = 1 048 576 se note M (mega).
230 = 1 073 741 824 se note G (giga).
• un chiffre binaire est appelé bit ("binary digit" en anglais) ; en français, "élément binaire" (eb), très peu utilisé.
• le bit le plus à gauche est appelé le bit de poids fort ou MSB (Most Significant Bit) ; le bit le plus à droite
est le bit de poids faible ou LSB.
• un nombre binaire est souvent appelé "mot binaire" car on le trouve dans un format fixe.
• le format d’un mot binaire est sa taille en nombre de bits.

Pour un format de n bits, les nombres exprimables appartiennent à l’intervalle [0, 2n -1], ce
qui fait 2n valeurs différentes. La valeur qui suit le plus grand nombre exprimable dans le format
n bits est 2n.

On peut avoir n’importe quel format, mais certains sont des classiques et possèdent même un nom :
En français En anglais Nombre de valeurs différentes possibles
4 bits quartet digit 16
8 bits octet byte 256
16 bits demi mot half word 65536 64 k
32 bits mot word 4 294 967 296 4G
64 bits mot long long word

Cette notion de format est très importante, car elle est associée à la taille réelle (physique) des mots binaires que la
machine manipule. C’est d’ailleurs le format qui est la caractéristique utilisée pour classer les microprocesseurs.

Remarques sur le comptage binaire naturel :


• le format étant fixé (p bits par exemple), un nombre N issu d’un comptage, exprimé en binaire naturel, évolue
selon N modulo 2p. Cela signifie qu’il repasse à 0 après être arrivé à 2p -1.
IUT Cachan - GEii1 5 JSR, rév.AP - 2003
• la séquence des nombres en binaire naturel possède une propriété utile pour sa composition : en observant la
colonne la plus à droite (le LSB, ou rang 0), on voit qu’il y a une alternance de ‘0’ et de ‘1’ ; au rang 1, on trouve une
alternance de deux ‘0’ puis de deux ‘1’ ; ainsi de suite : au rang k, il y a une alternance de 2k symboles ‘0’ et de
2k symboles ‘1’.
• on note aussi que d’une ligne de la séquence à la suivante, c’est lorsque le bit de rang ‘i’ passe de la valeur ‘1’ à
la valeur ‘0’ que le bit de rang ‘i+1’ change d’état.
4. La base hexadécimale (base 16)
Ce sera la base la plus utilisée par la suite. On peut considérer que c’est une variante « compacte » du binaire !
C’est pourquoi les valeurs seront presque toujours exprimées en hexadécimal (en abrégé, hexa), même si le contexte parle
de code binaire. Cette interchangeabilité entre binaire et hexa vient du fait que 16 est une puissance de 2.
base 16 = hexadécimal = { 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}

décimal hexa binaire


0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111

Tout nombre N peut s’exprimer en base hexadécimale avec n chiffres ordonnés, sous la forme :

N16 = (a n −1 ... a1 a 0 )16 = 0x an-1…a1a0

Cette écriture signifie que le nombre N se décompose en somme de puissances de 16, sous la forme :

i=n-1
N16 = Σ a 16i a ∈ base 16, n ∈ IN et n>0
i=0 i i

En langage C (cette écriture tend à s’imposer partout), les nombres hexadécimaux s’écrivent avec le préfixe 0x.
Par exemple, (1E7A)16 s’écrit 0x1E7A.
(1E7A)16 sera parfois noté 1E7Ah (h ou H pour Hexadécimal) ; on doit prononcer ‘un e sept a ‘.
On revient à la valeur décimale en utilisant la décomposition en somme de puissances de 16 ; il suffit de bien
traduire en décimal les symboles A à F. Ainsi :
3 2 1 0
0x1E7A = 1E7Ah = 1 x 16 + 14 x 16 + 7 x 16 + 10 x 16 = 780210
Passage Hexa <-> Binaire :
Sur le tableau ci-dessus, on voit qu’un symbole hexadécimal correspond à 4 bits en binaire. La technique est alors
évidente : on partage en « tranches de 4 bits » le mot binaire et on traduit chaque tranche en son équivalent hexadécimal
(attention ! en commençant par le bit de poids le plus faible, à droite ; il faut parfois rajouter des 0 à gauche).
Par exemple : (10111001000011001110001) = 0101 1100 1000 0110 0111 0001 =
2
0x5C8671
Inversement, on traduit chaque symbole hexadécimal en binaire sur 4 bits:
53B0h = 0101 0011 1011 0000 = (0101001110110000)
2

IUT Cachan - GEii1 6 JSR, rév.AP - 2003


Intérêt de l’hexadécimal par rapport au binaire naturel:
• la réduction par 4 du nombre de symboles pour exprimer les nombres binaires (code hexa 4 fois plus compact).
• les formats des nombres binaires dans les machines étant des multiples de quatre, on peut toujours utiliser
l’hexadécimal.
• le format d’un symbole hexa (4 bits) est aussi celui qui est nécessaire pour exprimer les chiffres décimaux.

Nous avons parcouru rapidement les trois bases entières dont nous ferons l’usage. A présent, ce sont les procédés
de conversion que nous devons aborder. Encore une fois, l’hexadécimal aura une place de choix.

B. Conversion d’un entier naturel de la base 10 vers une autre base


Pour convertir l’écriture d’un nombre entier naturel de la base 10 en une autre base B, on procède par divisions
entières successives par B. Le reste de chaque division fournit un des coefficients ai recherchés, le quotient sert à la
division entière suivante.
Prenons comme exemple le nombre décimal N=167957, à traduire en hexadécimal et en binaire.
On procède à une série de divisions par 16 ; tous calculs faits, il vient :
167957 = 10497 x 16 + 5 5 est le coefficient a0 (LSD)
10497 = 656 x 16 + 1 1 est le coefficient a1
656 = 41 x 16 + 0
41 = 2 x 16 + 9
2 = 0 x 16 + 2 2 est le coefficient a4 (les coefficients suivants sont tous nuls)
Ainsi :
N = (167957)10 = (29015) = 0x29015
16
Pour obtenir N en binaire, il suffit de faire la conversion (facile) hexadécimal->binaire : chaque digit hexadécimal
est converti en un groupe de quatre bits, d’où :
(29015) = (0010 1001 0000 0001 0101)
16 2
N = (167957) = (101001000000010101)2
10
Remarque :
Cette technique de division entière marche aussi avec la base 2 pour obtenir directement le code binaire de N. Ce
n’est pas conseillé (car plus long !) : il est toujours préférable de passer par l’hexadécimal, et de traduire
ensuite (si nécessaire !) en binaire.
A l’usage, on se rend compte qu’on utilise très peu l’écriture binaire, car elle est lourde et peut facilement être
remplacée par l’hexadécimal. Dans les langages de programmation tel que le C, la représentation des nombres en binaire
n’existe pas : l’hexadécimal et le décimal sont les seules bases disponibles.

C. Codes binaires pour les entiers signés (nombres relatifs)


Tous les nombres vus jusqu’à présent étaient des entiers naturels, donc positifs ou nuls. Voyons maintenant
comment coder les nombres entiers signés, qui peuvent être négatifs, positifs ou nuls.

1. Rappel : complément à 1
Le complément à un d’un bit a est le bit qu’il faut ajouter à a pour obtenir ‘1’. Il vaut 1 si a vaut 0, et 0 si a vaut 1.
On remarque que a et son complément à 1 sont toujours différents l’un de l’autre ; on dit aussi qu’ils sont l’inverse
l’un de l’autre (mais ce n’est pas très heureux par rapport à la notion mathématique de l’inverse d’un nombre).
Pour former le complément à 1 d’un mot binaire, on applique la règle sur chaque bit du mot.

IUT Cachan - GEii1 7 JSR, rév.AP - 2003


2. Comment gérer le signe d’un nombre relatif ?
Nous avons vu le code binaire naturel avec lequel on peut représenter les nombres entiers de l’ensemble IN. Pour
faire du calcul arithmétique, il faut pouvoir représenter les nombres relatifs.
D’une manière générale, on considère que le signe d’un nombre est une information binaire :
Le signe positif est attribué aux nombres positifs ou nuls
Le signe négatif est attribué aux nombres strictement négatifs
Avec ces conventions, il est possible de représenter le signe à l’aide d’un bit, qui sera placé à gauche du nombre.
Selon le codage utilisé, la valeur attribuée au bit de signe positif (0 ou 1) change.
On retient trois modes d’expression des nombres entiers en binaire signé dans un format donné : signe valeur
absolue, complément à deux et binaire décalé. Le code « complément à deux » est de loin le plus utilisé.

3. Le code « Signe valeur absolue » (non utilisé en pratique)


Le nombre binaire représenté avec cette convention est formé de deux parties. Le bit le plus à gauche est le bit de
signe ; à droite, on trouve la valeur absolue du nombre. Bien sûr, le plus logique est que le signe des nombres positifs ou
nuls soit codé par un bit de signe à 0 ; ainsi on conserve |x| = x si x > 0.
Exemple avec un nombre codé sur huit bits : on trouve un bit de signe et la valeur absolue sur sept bits :
(+57) = (00111001)
10 signe valeur absolue
(-57) = (10111001)
10 signe valeur absolue

Ce type de représentation des nombres relatifs est rarement employé, car il conduit à des complications matérielles
pour la réalisation et l’arithmétique. Mais on retrouve ce principe dans le codage des nombres réels à virgule flottante.

4. Le code « Complément à deux » (utilisé presque partout)


Le code complément à deux (code C2) est LA solution pour représenter les nombres entiers relatifs. Il est utilisé
dans tous les microprocesseurs pour coder les entiers signés (en langage C, pour les types long int, short int).

a) Règles de codage

Pour un entier positif, le code C2 se contente de reprendre le code binaire naturel (CBN). Mais attention, la
dynamique de codage est divisée par deux pour un format constant (car on « perd » le bit de signe). Par contre, pour les
entiers négatifs, le code C2 introduit un bit de signe et une technique de codage particulière, inspirée par le fait que (par
définition), tout entier relatif ‘x’ a un opposé noté ‘-x’ (excepté ‘0’) tel que :
x + -x = 0
Enoncé des règles de codage en complément à 2 sur n bits :

Soit A un entier positif.


• Le code C2 sur n bits de A est le code binaire naturel de A.
• L’entier négatif –A est codé en C2 sur n bits par le code binaire naturel de 2n-A (qui est positif) :
Code C2 de –A = code binaire naturel de (2n –A)

On remarque que dans ce mode de représentation des nombres relatifs, le bit de signe des nombres positifs vaut 0.
Exemple :
En format 8 bits, prenons x = (0110 0110)2 = 0x66. x est positif, puisque son bit de signe vaut 0.
En décimal ce nombre s’écrit : x = (102)10 obtenu grâce à la somme en puissances de 16 : x = 6*16+6*1=102.
Appliquons la règle du complément à deux en format 8 bits pour trouver le code C2 de -x. 28 = 256 donc :
-x C2 = (256 - 102)10 = (154)10
or (154)10 s’écrit en hexa : (9A)16
donc le code C2 de –x vaut :

IUT Cachan - GEii1 8 JSR, rév.AP - 2003


(-x) C2 = (9A)16 = (10011010) 2 après conversion hexa→binaire
8
On vérifie par l’addition que les deux nombres sont complémentaires à 2 . En effet :
01100110
+ 10011010
1 00000000
8
Dans le format 8 bits, le résultat est nul, car la retenue au rang 2 est hors format, elle n’appartient pas au résultat.

Si on cherche le code C2 de x sur 16 bits (voir aussi le paragraphe « extension de signe » page suivante):
x = 0x0066 = (00000000 0110 0110)2 = (102)10 inchangé à part les ‘0’ rajoutés à gauche
(-x) C2 = (216 - 102)10 = (65434)10 = (FF9A)16 = (11111111 10011010)2

Quelques codes caractéristiques à connaître :

♦ L’entier 0 s’écrit (0000….00) C2 quel que soit le format


♦ L’entier (-1)10 s’écrit (1111…1111) C2 = 0xFF…FF quel que soit le format
♦ Le plus grand entier positif sur n bits s’écrit (011111….11) C2 = 0x7F…F ; il vaut (+2n-1-1)10
♦ Le plus grand entier négatif sur n bits s’écrit (100…000) C2 = 0x80…00 ; il vaut (-2n-1)10

b) Technique de calcul pour trouver le code C2 de l’opposé d’un nombre :

Technique pour obtenir le code C2 de –N à partir du code C2 de N :


Pour former les chiffres du complément à la base B d’un nombre exprimé dans cette base, on procède de
droite à gauche. Tous les chiffres nuls situés à droite sont recopiés. Au premier chiffre non nul, on fait
correspondre le complément à la base B ; pour les suivants, on fait correspondre le complément à (B-1).

En électronique numérique, il faut bien sûr travailler en base 16. Le calcul du complément à 16 devient un
raccourci de calcul du complément à 2, mais nous continuerons de parler du « complément à deux » (C2) même en
travaillant en hexadécimal !

Soit par exemple le nombre N=(60A7E904) :


16
son complément à 16, c’est-à-dire le code C2 de –N, s’écrit directement (calcul de tête) : (9F5816FC) .
16
Explication : pour le LSB non nul, on prend le complément à 16 :16-4=12=C en hexa. Pour les autres chiffres, on
prend le complément à 15, soit 15-0=F, puis 15-9=6, etc…

Autre exemple : soit N = (5001BC97024400)


16
le code C2 de –N, c’est-à-dire son complément à 16, est (toujours de tête) : (AFFE4368FDBC00) .
16
Dans ce dernier exemple, il y a quatorze chiffres hexadécimaux, cela correspond à 56 bits en base deux ! Comme
le montrent ces exemples , le passage au binaire n’est absolument pas nécessaire. En pratique, il est rarement utile…
Malgré la méthode de calcul qui utilise le complément à seize, nous continuerons de parler du complément à deux.
Par définition, l’addition des nombres en binaire pur est la même opération que pour les nombres en complément à
deux. C’est vrai parce que le format des mots binaires est fixe. En conséquence, le même matériel est utilisé pour réaliser
les calculs pour les deux modes de représentation des nombres binaires ; d’où l’utilité du code complément à 2.

c) Dynamique de codage

Pour un format donné, la dynamique de codage correspond aux intervalles de valeurs positives et négatives
qu’on peut exprimer. Comme le signe occupe le bit de poids fort, cela réduit d’un bit le format utile pour le codage du
reste de la valeur (soit d’un facteur 2 le plus grand entier positif exprimable en C2).
M-1 M-1
La dynamique de codage pour un format de M bits est : N∈[-2 , +2 -1]

IUT Cachan - GEii1 9 JSR, rév.AP - 2003


M-1
0 étant considéré comme un entier positif, la dynamique inclut 2 nombres positifs et autant de négatifs.
D’une manière générale (dans une base B), les nombres négatifs sont reconnaissables par le fait que le chiffre de
poids fort est supérieur ou égal à B/2. En binaire, cela correspond bien au bit de signe égal à ‘1’, tandis qu’en hexadécimal
cela correspond à un chiffre de poids fort supérieur ou égal à 8.

d) Extension de signe

Les calculs précédents se font dans un format donné du nombre. Un nombre doit conserver sa valeur même s’il est
exprimé dans d’autres formats. Cela veut dire, entre autres, que dans un changement de format, un nombre positif reste
positif et un nombre négatif reste négatif.
Nous n’envisageons que l’augmentation du format. En binaire, l’augmentation de format entraîne le déplacement
du bit de signe vers la gauche afin que le bit de signe soit toujours le bit de poids fort (MSB). Par exemple N = (0100)2 =
(00000100)2 est évident ; le nombre N est positif en format 4 bits, il reste positif et représente la même valeur en format
8 bits. En répétant les zéros à gauche, nous avons propagé le bit de signe sur toutes les nouvelles positions à gauche.
Pour le nombre négatif, dont le bit de signe est à ‘1’, on opère de la même façon, c’est-à-dire qu’on propage le ‘1’
sur toutes les nouvelles positions à gauche. Par exemple :
format 4 bits format 8 bits
-N = (1100)complément à 2 = (11111100)complément à 2

En notation hexadécimale, si le nombre de départ est positif, alors le chiffre de poids fort est inférieur à 8 ;
l’extension du signe ajoute à gauche seulement des zéros. Si le nombre est négatif, alors le chiffre de poids fort est
supérieur ou égal à 8 ; l’extension du signe ajoute donc des ‘F’ à gauche.

Règle pour l’extension de signe : on recopie le bit de signe (0 ou 1) dans les positions supplémentaires à gauche.

Exemples :

format 16 bits format 32 bits format 16 bits format 32 bits


(2E97)complément à 2 = (00002E97)complément à 2 (A037)complément à 2 = (FFFA037)complément à 2

format 8 bits format 32 bits format 8 bits format 32 bits


(97)complément à 2 = (FFFFFF97)complément à 2 (4E)complément à 2 = (0000004E )complément à 2

5. Arithmétique binaire en complément à 2


a) Addition
L’addition en binaire s’effectue de la même façon qu’en décimal.

retenue somme
0+0= 0 0
0+1= 0 1
1+0= 0 1
1+1= 1 0

Il y a deux résultats, la somme et la retenue. La somme est le bit poids 0; la retenue est un bit de rang supérieur.
L’addition binaire est simple et ne nécessite pas de long discours.

b) dépassement de capacité dans l’addition :

La représentation des nombres binaires dans les calculateurs étant dans un format fixe, il y a des limites d’emploi
de l’addition.
0 0 1 0 <- retenues 1 1 0 0 <-retenues
1 0 1 1 1 0
+ 0 0 1 + 0 1 1
0 1 0 0 0 1
correct incorrect
Ces deux additions ont été faites dans le format 3 bits en binaire naturel. Dans le premier cas, la retenue au delà du
troisième bit est nulle. Le résultat dans ce format est correct (5+1=6). Dans le deuxième cas, la retenue au delà du
troisième bit est égale à un, donc le résultat est faux dans le format 3 bits (6+3≠1).

IUT Cachan - GEii1 10 JSR, rév.AP - 2003


Le dépassement de capacité survient quand une retenue est générée au delà du format des nombres.

c) Débordement lors d’une addition :

La notion de débordement est associée au binaire signé (complément à deux ou binaire décalé).
binaire décimal
0 1 0 +2 la somme de deux
+ 0 0 1+ +1 nombres positifs
0 1 1 +3 est positive, OK
Ce premier calcul renvoie un résultat correct. Voici un autre exemple où les choses se passent moins bien (on
utilise le complément à deux) :
binaire décimal
0 1 0 +2 la somme de deux
+ 0 1 1+ +3 nombres positifs
1 0 1 -3 est négative, aïe !
Cette fois, la somme de deux nombres positifs fournit un résultat négatif ! C’est bien sûr impossible.
Le débordement doit son existence au fait que les nombres ont un format fixe et que le bit de poids fort (MSB) est
le bit de signe. En cas de débordement, ce bit de signe est écrasé et le résultat est faux.
Ces problèmes de dépassement de capacité et de débordement se retrouvent dans les unités de calcul des
microprocesseurs.
Afin de savoir quand peut se manifester un débordement, posons le problème de l’addition de deux nombres
binaires codés en complément à deux dans le format n bits.
Commençons par le cas où les deux nombres x et y sont de signes opposés.

Soit x ∈ [-2n-1, -1] et y ∈ [0, 2n-1-1] .

Alors leur somme z = x + y appartient à l’intervalle z ∈ [-2n-1, 2n-1-2]


Cet intervalle de z est inclus dans l’ensemble de définition, donc il ne peut pas y avoir de débordement
quand les nombres sont de signes opposés.
Si les deux nombres sont de même signe : il est évident que la somme de deux nombres positifs peut donner un
résultat qui est supérieur à 2n-1-1; c’est l’origine du phénomène du débordement.
n-1 n-1
Supposons que x et y soient positifs, soit x ∈ [0, 2 - 1] et y ∈ [0, 2 - 1]
n-1 n-1 n
alors leur somme z = x + y appartient à l’intervalle z ∈ [0, 2 - 1] U [2 ,2 - 2]
n-1
Dans le sous-intervalle [0, 2 -1], le résultat appartient à l’ensemble de définition, tandis que le sous-
n-1 n
intervalle [2 , 2 -2] n’appartient plus à l’ensemble de définition des nombres positifs.
n
Le nombre z obtenu est bien dans le format n bits (car inférieur à 2 ), mais sa valeur est interprétée comme
négative, car le MSB vaut 1. Ainsi, alors que x et y sont positifs, leur somme est interprétée comme négative
en C2.
On en déduit la règle de détection du débordement (dans le cas de l’addition) :
Si les deux opérandes de l’addition sont de même signe,
il y a débordement quand le résultat n’a pas le même signe que les opérandes.
Le signe étant porté par les MSB des nombres, cette détection se fait en comparant uniquement ces bits.

d) Soustraction

La soustraction se ramène à une simple addition en C2 (donc à la règle précédente) : A-B équivaut à A+(-B).
par exemple :
format 8 bits
01101010 106 est équivalente à 01101010 106
- 00011011 - 27 + 11100101 + -27
01001111 79
IUT Cachan - GEii1 11 JSR, rév.AP - 2003
6. Le code Binaire décalé (utilisé parfois)
Le binaire décalé est un codage dérivé du complément à deux. Il est utilisé dans certaines applications où on veut
pouvoir comparer facilement des entiers signés. Sa principale application est le codage de l’exposant des nombres réels.
Avec le tableau suivant, il est facile de comparer les codages en complément à 2 et le binaire décalé (format 4 bits):

Valeur relative valeur Valeur relative Valeur Equivalent décimal


équivalent décimal du
exprimée en exprimée en exprimée en exprimée en du codage binaire
codage binaire
décimal C2 décimal binaire décalé
+7 0111 7 +7 1111 15
+6 0110 6 +6 1110 14
+5 0101 5 +5 1101 13
+4 0100 4 +4 1100 12
+3 0011 3 +3 1011 11
+2 0010 2 +2 1010 10
+1 0001 1 +1 1001 9
0 0000 0 0 1000 8
-1 1111 15 -1 0111 7
-2 1110 14 -2 0110 6
-3 1101 13 -3 0101 5
-4 1100 12 -4 0100 4
-5 1011 11 -5 0011 3
-6 1010 10 -6 0010 2
-7 1001 9 -7 0001 1
-8 1000 8 -8 0000 0

On observe que le codage en C2 est tel que les codes des nombres positifs sont plus petits que ceux des nombres
négatifs. Par contre, les codes « binaire décalé » des nombres positifs sont supérieurs aux codes des nombres négatifs.
Cette propriété du binaire décalé permet de comparer plus facilement les codes quand il faut comparer des nombres.
code binaire décalé
complément à deux
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
valeur
-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7

Comme l’équivalent décimal du codage des positifs a été augmenté de 8, on dit que le code binaire est décalé.
IUT Cachan - GEii1 12 JSR, rév.AP - 2003
Le binaire décalé s’obtient en ajoutant 2format-1 au nombre binaire en complément à deux. Plus simplement
encore, le binaire décalé est obtenu en inversant le bit de signe du complément à deux. On peut, comme toujours,
travailler en hexadécimal.

IUT Cachan - GEii1 13 JSR, rév.AP - 2003


III. Codage des nombres réels (« flottants »)

Le codage des nombres réels est plus complexe que celui des entiers, même signés. Il est vite fastidieux à réaliser à
la main ! Seul le principe est vraiment à retenir : en particulier, la notion de signe / mantisse / exposant.

1. Codage « en virgule fixe » d’un réel inférieur à 1


Pour les nombres entiers, la conversion d’une base en une autre passe par la technique des divisions successives.
Qu’en est-il si l’on veut exprimer un nombre réel inférieur à 1 dans une autre base?
Tout nombre admet un développement polynomial. Si le nombre est inférieur à 1, ce développement fait intervenir
les puissances inverses (négatives) de la base. Soit :
base B = {0, 1, ...., B-1} avec B ∈ IN, B>1
-1 -2 -3 -n
X = a x B + a x B + a x B + ... +a x B a vec a ∈ B, n ∈ IN et n>0
1 2 3 n i
Nous allons bien sûr nous intéresser à la représentation binaire, ou mieux hexadécimale, d’un nombre réel X <1 :

X = a1 x 16-1 + a2 x 16-2 + a3 x 16-3 + ... + an x 16-n pour X<1

,
On peut alors écrire X sous la forme dite « en virgule fixe » : X = ( a1 a2 a3 … an )2

Calcul des coefficients ai : avec ce développement on peut facilement montrer comment s’obtiennent les
coefficients ai. En effet, en multipliant X par 16 :

X x 16 = a1 x 160 + a2 x 16-1 + a3 x 16-2 + … +an x 16-n+1

alors le réel X x 16 s’écrit : a1 , a2 a3 … an écriture dans laquelle a1 est la partie entière de ‘X x 16’.

,
En multipliant ‘0 a2 a3 … an ’ par 16, on pousse à son tour a2 chez les entiers ; ainsi, par multiplications par
16 successives, on extrait les coefficients recherchés.

Exemple : comment le nombre 0,63212 s’écrit-il en base 16, puis en base 2 ?


Attention : il ne faut pas oublier que a
i
∈ {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}.
0,63212 x 16 = 10,11392 → a1 = 10 = A
0,11392 x 16 = 1,82272 → a2 = 1 = 1
0,82272 x 16 = 13,16352 → a3 = 13 = D etc...
Donc, sachant que chaque chiffre hexadécimal s’écrit sur 4 bits :
0,63212 = (A 1 D) = (1010 0001 1101) = (101000011101) sur douze bits
16 2

Ce codage d’un réel inférieur à 1 en virgule fixe est utilisé pour coder la mantisse des nombres réels dans les
ordinateurs. Le passage par l’hexadécimal sera, là encore, très utile.

2. Nombres « à virgule flottante »


On vient de voir que les nombres inférieurs à 1 peuvent être convertis en binaire en utilisant une somme des
puissances inverses de 2 (format dit « à virgule fixe »). Mais cette méthode de conversion ne peut pas convenir pour
représenter tous les nombres réels. Prenons par exemple le réel e =-1,602.10-19. En fait, 2-63< e < 2-62, ce qui veut dire que
dans le mot binaire issu de la conversion en virgule fixe, il faut compter 62 zéros à droite de la virgule, avant de trouver le
premier ‘1’ significatif… Cela pose un problème de format !
Cette petite remarque sur un cas concret introduit bien l’idée du codage des réels. En effet, il suffit de coder
l’exposant de la première puissance de 2 significative (ici -63). Cela revient à déplacer la virgule à droite du premier bit
significatif égal à ‘1’. Ainsi la virgule « flotte » selon le nombre réel à coder ; c’est pourquoi on parle de « virgule
flottante » ou de nombres « flottants ».
IUT Cachan - GEii1 14 JSR, rév.AP - 2003
Une fois la virgule placée à droite du premier ‘1’ significatif le nombre réel s’écrit alors : 1 a1 a2…an. C’est ,
l’écriture d’un nombre dont il est simple de calculer les coefficients par la méthode des multiplications successives (en
hexadécimal, évidemment).

B. Normalisation
La virgule flottante permet une infinité d’écritures du même nombre ; l’exposant peut prendre n’importe quelle
valeur entière.
-19 -20 -18
Exemple : -1.602 10 = -16.02 10 = -0.1602 10
La représentation normalisée correspond à l’exposant qui permet d’avoir en partie entière un seul chiffre différent
de zéro. En base 10, cela veut dire que la partie entière de l’écriture normalisée est un chiffre ∈ {1, 2, 3, 4, 5, 6, 7, 8, 9}.
En binaire, cette partie entière vaut toujours 1. C’est cette écriture binaire normalisée qui est utilisée dans les ordinateurs,
et que nous allons voir maintenant en détail.

C. Normalisation des réels en base 2


Pour coder en base 2 le nombre réel X (quelconque), X doit être écrit sous la forme imposée par le format « virgule
flottante normalisée »:
S
X = (-1) . 2E . (1+m)
Le codage en binaire du nombre réel X se ramène ensuite aux codages du bit de signe (S), de l’exposant (E)
et de la partie fractionnaire de la mantisse (m).
Il existe plusieurs normalisations de codage selon le nombre de bits utilisé pour coder l’exposant et la mantisse. Les
normes IEEE simple et double précision sont les plus connues (utilisées pour les types float et double du langage C).

• Codage du signe S : avec la notation (-1)S, il est évident que S=0 si X≥0 et S=1 si X<0.

• codage de l’exposant E : il se fait toujours en binaire décalé afin d’en simplifier la comparaison.
On peut trouver la valeur de E par comparaison avec les différentes puissances de 2. Mathématiquement, E est le
plus petit entier le plus proche de ln2 | X | (ln2 (x) est le logarithme en base 2 de x, c’est-à-dire ln(x)/ln(2)).

• Codage de la mantisse m : par construction, m est un nombre réel inférieur à 1 ; elle peut donc être codée en virgule
fixe (c’est-à-dire à l’aide des coefficients de sa décomposition en puissances négatives de 2).

1. Codage IEEE simple précision sur 32 bits


Voici le format du codage normalisé sur 32 bits (4 octets), qui correspond au type float du langage C :

1 bit 8 bits 23 bits


S Cod.Bin.Nat. de (exposant + 127) mantisse

exemples Code en Hexa


1.0 0 011 1111 1 000 0000 0000 0000 0000 0000 0x3F800000
-1.375 1 011 1111 1 011 0000 0000 0000 0000 0000 0xBFB00000
0.632121 0 011 1111 0 010 0001 1101 0010 1010 1110 0x3F21D2AE
0 0 000 0000 0 000 0000 0000 0000 0000 0000 0
NaN 1 111 1111 1 111 1111 1111 1111 1111 1111 NaN

Les deux derniers codages sont des exceptions permettant de coder le 0 et NaN (Not a Number), c’est-à-dire
un code qui représente une erreur de codage.

IUT Cachan - GEii1 15 JSR, rév.AP - 2003


La dynamique de codage des nombres réels va de ±1.18 10-38 à ±3.4 10+38.
Mais plus encore que la dynamique (assez large pour la plupart des applications !), c’est la précision
relative des calculs qui découle de la taille de la mantisse et de l’exposant : en simple précision, elle est seulement
de l’ordre de 10-6. C’est insuffisant pour beaucoup d’applications, d’où l’intérêt du codage sur 64 bits.
2. Codage IEEE double précision sur 64 bits
Voici le format du codage normalisé sur 64 bits (8 octets), qui correspond au type double du langage C :

1 bit 8 bits 23 bits


Cod.Bin.Nat. de
S (exposant + mantisse
1023)

exemples Code en Hexa


1.0 0 011 1111 1111 0000 0000 0000 0000 0000 0000 … 0000 0x3FF0000000000000
-0.6875 1 011 1111 1110 0110 0000 0000 0000 0000 0000 … 0000 0xBFE6000000000000

La dynamique de codage des nombres réels va de ±2.23 10-308 à ±1.8 10+308. C’est beaucoup !
Mais l’intérêt de la double précision est surtout dans la précision relative des calculs : elle est de
l’ordre de 10-15.

3. codage précision étendue 80 bits


Codage sur 80 bits (10 octets) :

1
1 bit 13 bits 65 bits
bit
S exposant + 4095 1 mantisse

Pour ce codage, le bit 1 qui est la partie entière du nombre fractionnaire est présent dans le code ; ceci simplifie le
matériel des unités de calcul.

La dynamique de codage des nombres réels va de ±3.4 10-4932 à ±1.1 104932 .

IUT Cachan - GEii1 16 JSR, rév.AP - 2003


IV. Autres codes binaires
Dans ce qui suit, il n’est plus question de nombres, car les codes binaires présentés ont des usages différents, utile
en électronique plutôt qu’en informatique. Bien sûr, l’hexadécimal sera utilisé pour simplifier l’écriture des mots binaires.
Tous les codes binaires étudiés sont dans un format fixé.
C’est d’ailleurs à partir de cette idée de format que nous allons introduire la notion de code binaire. Considérons un
format deux bits. Cela veut dire que l’on limite le nombre de mots binaires différents à 22= 4. La séquence du binaire
naturel pour ces quatre mots est la suivante :
00 01 10 11
Pour produire cette suite de mots de deux bits, on peut utiliser la règle de composition du code binaire naturel, qui
est l’alternance des ‘0’ et des ‘1’ dans un nombre égal à 2rang.
En fait, les codes binaires, pour un format donné de n bits, se distinguent les uns des autres seulement par la
séquence des mots binaires : ils utilisent les mêmes 2n combinaisons de bits possibles, mais les mots binaires ne se
succèdent pas dans le même ordre.
En produisant un code binaire, donc en choisissant une succession de mots binaires (séquence) particulière, on veut
obtenir de lui une ou des propriétés qui vont être exploitées dans les systèmes électroniques de traitement de l’information.

A. Code BCD
BCD est issu de Binary Coded Decimal à traduire par Décimal Codé en Binaire… et cela dit bien de quoi il s’agit.
On code directement chaque chiffre d’un nombre écrit en base dix avec son équivalent en binaire naturel. On ne fait
pas la conversion du nombre, on fait le codage des chiffres ! C’est beaucoup plus simple et rapide.
Voici la table de correspondance décimal et BCD (assez évidente).

0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
Par exemple :
1989 = (0001 1001 1000 1001)BCD
741 = (0111 0100 0001)BCD
Ces deux exemples montent bien que chaque chiffre codé nécessite quatre bits. Un entier codé en BCD utilise
donc plus de bits que le codage binaire naturel.
Ce codage est très simple. Il est particulièrement utilisé lors de l’affichage sur des afficheurs 7 segments.
Un problème qui se pose souvent est de passer du code binaire naturel d’un nombre à son codage BCD. Pour
comprendre, il suffit de comparer les séquences du binaire naturel et du BCD. Que se passe-t-il au voisinage de 10 par
exemple ?

décimal BCD binaire pur


8 1000 1000
9 1001 1001
10 0001 0000 1010
11 0001 0001 1011

En fait la séquence BCD est identique à celle du binaire pur jusqu’à 9. A dix, le BCD prend la valeur 0001 0000,
qui vaut seize en décimal. Donc quand un chiffre hexa du binaire pur est supérieur à 9, on lui ajoute 6 pour obtenir le
code BCD équivalent. Cette idée est exploitée dans les calculateurs binaires qui travaillent directement avec les nombres

IUT Cachan - GEii1 17 JSR, rév.AP - 2003


codés BCD.

B. Code de Gray
Pour mieux mettre en évidence la propriété utile du code de Gray, reparlons du binaire naturel. Nous avons
remarqué que dans la séquence du binaire naturel, le passage de ‘1’ à ‘0’ sur un bit de rang i fait que le bit de rang
supérieur i+1 change d’état. Il se trouve dans la séquence du binaire naturel de nombreux cas où plusieurs bits changent
d’état en même temps. Par exemple, lors d’un comptage sur 3 bits :
000
001 de cette ligne à la suivante, deux bits changent d’état
010
011 de cette ligne à la suivante, les trois bits changent d’état
100
101
Dans certains dispositifs1, il est impossible de faire basculer deux bits simultanément. Dans d’autres, il est
important que tous les bits basculent « exactement » en même temps (alors que c’est physiquement difficile). Cette
propriété du binaire naturel est donc un défaut qui le rend inadapté à certaines applications.
La solution est le code de Gray, pour lequel un seul bit change lors du passage d’un mot binaire au suivant.
Voici la séquence du code de Gray pour des mots de format 3 bits.
000
001 le trait horizontal sous le ‘1’ représente une réflexion (au sens optique du terme), voir plus bas
011
010
110
111
101
100
Une méthode de génération du code est de procéder par réflexion : on voit sous le ‘1’ souligné que le bit de faible
poids reprend les mêmes valeurs qu’au dessus de ce ‘1’ souligné, comme si le trait était la marque d’une pliure ; en pliant
selon ce trait, les ‘1’ et ‘0’ du LSB se superposent. On procède de même sur les deux bits de faible poids quand on a
compté les 4 premières combinaisons, et ainsi de suite … C’est à cause de cette méthode qu’on appelle aussi le code de
Gray le "binaire réfléchi"
On vérifie que d’une ligne à la suivante dans la séquence du code de Gray, il n’y a qu’un seul bit qui change d’état.
D’une manière générale, des mots binaires dont un seul bit diffère sont dits adjacents. Il faut remarquer que la première et
la dernière ligne de la séquence sont aussi adjacentes.
Cette notion de mots binaires adjacents est utilisée par des techniques de simplification des équations logiques.

Nous avons limité notre propos au code BCD et au code de Gray, fréquemment rencontrés par l’électronicien. Mais
il existe un grand nombre de codes binaires, chacun ayant des propriétés particulières.

1 Un cas typique est celui des codeurs de position montés sur les arbres de machines tournantes. Par principe, le
code binaire est parcouru périodiquement. Un dispositif mécanique ou optique produit un signal électrique sur plusieurs fils ;
à chaque fil correspond un bit du code binaire. Il est physiquement impossible de réussir des changements d'état
simultanés sur plusieurs bits; d'où l'intéret du code de Gray.
IUT Cachan - GEii1 18 JSR, rév.AP - 2003
V. Conclusion
Ce document, un peu théorique, a introduit beaucoup de vocabulaire et a permis l’exposé de quelques méthodes de
travail.
Le binaire est la base de l’électronique numérique, mais c’est l’écriture hexadécimale qui est l’outil le mieux adapté
pour toutes les opérations à réaliser. Heureusement, le passage binaire↔hexadécimal est simple et doit devenir évident à
tout électronicien.

IUT Cachan - GEii1 19 JSR, rév.AP - 2003


VI. Annexes
1. Multiplication binaire
Voici la table de multiplication en binaire :
produit
0x0= 0
0x1= 0
1x0= 0
1x1= 1
Le principe de la multiplication de deux nombres entre eux est le même qu’en décimal.
Pour le calcul à la main la multiplication en binaire n’est pas vraiment une bonne idée (c’est si simple en décimal).
Ce dont on peut discuter c’est plutôt comment la machine peut s’y prendre. Là il y a une grande variété de possibilités
nous allons en présenter deux qui ont des applications pratiques importantes ce sont la méthode de Wallace et le recodage
de Booth.

a) Méthode de Wallace

Soit les nombres au format 2 bits (b1 b0) et (a1 a0) dont on fait le produit :
b1 b0
x a1 a0
a0 .b1 a0.b0
a1.b1 a1.b0
a1.b1 a1.b0 + a0.b1 a0.b0
Ce premier résultat est à obtenu matériellement grâce à une cellule de base (multiplieur 2x2). On va montrer
maintenant que pour une multiplication de deux mots de 4 bits il suffit de disposer de quatre multiplieurs 2 x 2 :
Soit deux mots de 4 bits multipliés entre eux :

b3 b2 b1 b0
x a3 a2 a1 a0
a0xb3 a0xb2 a0xb1 a0xb0
+ a1xb3 a1xb2 a1xb1 a1xb0
+ a2xb3 a2xb2 a2xb1 a2xb0
+ a3xb3 a3xb2 a3xb1 a3xb0
a1xb3 a0xb3+a1xb2 a0xb2
+ a3xb3 a2xb3+a3xb2 a2xb2 a1xb1 a0xb1+a1xb0 a0xb0
+ a3xb1 a2xb1+a3xb0 a2xb0
Les trois dernières lignes sont organisées pour faire apparaître les résultats partiels des multiplications 2 x 2 bits. Il
faut donc faire les 4 produits suivants :
(b3 b2) x (a1 a0)
(b3 b2) x (a3 a2)
(b1 b0) x (a1 a0)
(b1 b0) x(a3 a2)
Puis il faut faire les additions des résultats partiels de chaque rang.

IUT Cachan - GEii1 20 JSR, rév.AP - 2003


0

a0 0 rin
a1 0
1
Π
1
2
b0 2
3 0
b1 3

Σ
0 1
2
a0
2 rin 0 0 3
a1 3 0 1
b2 Π 4
5
2 rout
3
b3

a2 2
Σ
a3 3 0 rin

Π 4 1
b0 5 rout 2
b1 0 3 4

Σ
5
a2 4 6
a3 0 7
5
1
b2 Π 6
7
2 rout
b3 3

La réalisation du multiplieur ‘X’ nécessite donc quatre multiplieurs 2x2 et trois additionneurs 4+4.
On peut continuer ce type de démonstration pour des multiplications de mots de format 8 bits et plus. Des circuits
intégrés sont disponibles pour réaliser des multiplicateurs selon cette technique. La multiplication se fait en parallèle car
tous les bits sont traités simultanément.

b) Multiplication des nombres binaires signés

Voici trois multiplications de nombres signés, la première entre deux positifs (+3 x +3) ne pose aucune difficultés;
par contre, que donne le produit d’un nombre négatif en complément à deux par un positif (-3 x +3) et le produit de deux
nombres négatifs (-3 x -3) en complément à deux?
011 101 101
x 011 x 011 x 101
équivalent à :
000011 111101 111101
x 000011 x 000011 x 111101
000011 111101 111101
000110 111010 000000
000000 000000 110100
000000 000000 101000
000000 000000 010000
000000 000000 100000
001001 110111 001001
Les opérandes ont systématiquement été amenés au format du résultat avec l’extension de signe. Tous les calculs
intermédiaires sont exprimés dans le format fixé.
Ainsi la multiplication donne un résultat correct.

IUT Cachan - GEii1 21 JSR, rév.AP - 2003


Ces techniques de calculs en parallèle sont très coûteuses en matériel. On peut limité ce coût en utilisant des
procédés séquentiels. C’est le cas de la méthode de Booth.

c) Méthode de Booth

Voici les conditions matérielles de la réalisation d’un multiplieur qui utilise le codage de Booth. Cette méthode,
très utilisée dans les ordinateurs, permet de faire les multiplications des nombres en complément à deux.

décalage
LSB -1
P A

±
booth

A et B sont les nombres à multiplier. La multiplication se fait en série; c’est à dire, que pour chaque bit (LSB) de
A, on évalue comment utiliser B dans le résultat que l’on forme dans P; la valeur du précédent LSB est temporairement
conservée LSB-1 car il participe à la prise de décision. On passe au bit suivant de A en pratiquant un décalage vers la
droite de l’ensemble (PA). Quand tous les bits de A ont été traités le résultat est dans la paire PA. Au cours du décalage, le
bit MSB de P est conservé (extension du bit de signe).
Les règles sont les suivantes :

LSB LSB-1 opération


0 0 additionner 0
0 1 additionner B
1 0 soustraire B
1 1 additionner 0

Afin de justifier ces règles, notons que la multiplication se faisant bit à bit (du multiplicateur), on peut procéder à
l’analyse pas à pas en progressant de même.
Posons que dans B se trouve un nombre x. Dans A se trouve le multiplicateur
A=a a …a a
n-1 n-2 1 0
La multiplication se fait en binaire signé en complément à deux. Au premier pas, c’est a • x qui est calculé.
0
Détaillons :
a résultat
0
0 0
1 -x
Attention, dans ce cas a est l’unique bit (connu) du multiplicateur mais il est aussi le bit de signe!
0
Passons à a , cette fois nous devons reconsidérer les résultats de la multiplication afin de tenir compte des valeurs
1
possible de a . Voici alors le tableau des solutions; cette fois on montre comment corriger les calculs faits précédemment
1
:

IUT Cachan - GEii1 22 JSR, rév.AP - 2003


a a résultat résultat correction
1 0 précédent
0 0 0 0 0
0 1 x -x +2x
1 0 -2x 0 -2x
1 1 -x -x 0

Quand a = 0, il faut revoir le résultat précédent car le nombre n’est plus négatif comme on l’avait supposé. Il faut
1
donc ajouter 2x afin de retrouver x. Le décalage dans PA, qui a eu lieu entre le traitement de a et celui de a ,
0 1
correspond à cette multiplication par deux de x. Ainsi +2x revient, à ce niveau, à additionner le contenu de B.
Dans le cas où a = 1, le nombre A (pour ce que l’on en connaît) est négatif, donc les résultats sont -2x ou bien -x;
1
d’où les corrections proposées dans le tableau. Ici aussi -2x revient à soustraire B.
On retrouve ainsi les règles proposées initialement.

2. Arithmétique des nombres flottants


Les opérations arithmétiques sur les flottants exigent de faire un travail sur les exposants et sur les mantisses.

a) Addition et soustraction

Les deux nombres à additionner doivent avoir le même exposant. Il est donc (éventuellement) nécessaire de
modifier le codage d’un des opérandes afin de le ramener au même exposant que l’autre opérande. Cette première
opération consiste donc à dénormaliser un des opérandes. Le codage des flottants n’admettant pas le codage de la partie
entière, il faut dénormaliser le plus petit et recalculer sa mantisse. C’est le plus grand qui impose la précision du calcul.
La différence des deux exposants (le plus grand moins le plus petit) indique le nombre de décalages à droite que
doit subir la mantisse du plus petit des deux nombres. Attention à ne pas oublier la partie entière égale à ‘1’ et qui est
introduite dans la mantisse au premier décalage.
L’addition binaire des mantisses peut alors avoir lieu. Par principe cette addition peut produire une partie entière ≤
2. Si le résultat est supérieur à 1 alors il faut le renormaliser en décalant à droite la mantisse d’un bit et en ajoutant 1 à
l’exposant. Par contre si la partie entière est nulle et que la mantisse n’est pas nulle il faut simultanément décaler à gauche
d’un bit et diminuer l’exposant de 1. Il faut répéter cette opération jusqu’à ce que la partie entière soit égale à 1.
Pour la soustraction il faut utiliser le même algorithme et faire l’addition du diminuende avec le complément à 2 du
diminuteur.
Il faut gérer correctement les problèmes de débordement. Le format pour la mantisse du résultat est celui de la
mantisse des opérandes augmenté de deux bits.

b) Multiplication

Le calcul des exposants se fait par l’addition. Mais attention au codage en binaire décalé des exposants. Les
mantisses sont multipliées sachant que le produit est inférieur à 4. La renormalisation du résultat peut donc être nécessaire.

IUT Cachan - GEii1 23 JSR, rév.AP - 2003

Vous aimerez peut-être aussi