Académique Documents
Professionnel Documents
Culture Documents
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).
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).
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
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).
i=n-1
N = Σ a Bi a ∈ base B, n ∈ IN et n>0
B i=0 i i
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.
Tout nombre N peut s’exprimer en base hexadécimale avec n chiffres ordonnés, sous la forme :
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
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.
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.
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.
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 :
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 :
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
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 !
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]
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 :
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.
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).
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.
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):
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.
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.
,
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 :
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.
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.
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.
• 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).
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.
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.
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.
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 ?
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
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.
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.
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.
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.
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 :
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
:
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.
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.