Document 1

publicité
UNIVERSITE Joseph FOURIER, Grenoble
U.F.R. d’ Informatique et Maths. Appliquées
Représentation des nombres en machine
Sacha Krakowiak
Nous considérons un emplacement de mémoire de n bits numérotés, par convention, de 0 à n−1 de
droite à gauche. Un tel emplacement peut contenir 2n valeurs distinctes de l’information. Représenter
dans cet emplacement une donnée d’un certain type (nombre entier, nombre fractionnaire, chaı̂ne de
caractères, etc.), c’est :
1. définir parmi les valeurs possibles que peut prendre cette donnée un sous-ensemble d’au plus 2n
valeurs distinctes,
2. définir une correspondance entre ces valeurs, dites représentables, et les 2n configurations possibles des n bits de l’emplacement,
3. définir l’effet, sur la représentation choisie, des opérations associées au type considéré.
Dans cette note, nous étudions la représentation des nombres entiers et d’une certaine classe de
nombres réels représentables par des fractions. En ce qui concerne les opérations sur ces nombres, nous
nous limitons à l’addition et à la multiplication par une puissance de 2. Cela nous permet d’introduire
les notions de report et de débordement.
Les sections dont le titre est marqué d’un astérisque ne font pas partie du programme et peuvent
être lues à titre de complément.
1
1.1
Représentation des entiers positifs
Représentation en base 2
Nous choisissons de représenter les 2n valeurs {0, 1,. . ., 2n −1}. Un entier a appartenant à cet
ensemble possède une représentation en base 2 de la forme :
a = an−1 2n−1 + an−2 2n−2 + · · · + a1 21 + a0 20
(1)
Par convention, le nombre a est représenté par la suite de bits (an−1 , an−2 , . . . , a0 ). Le coefficient
du bit ai , soit 2i , est aussi appelé son poids.
La table 1 donne la représentation de quelques valeurs particulières.
Nombres positifs
0
1
2n−1
2n − 1
0
0
1
1
0
0
0
1
...
...
...
...
0
0
0
1
0
1
0
1
Tab. 1 – Représentation des entiers positifs
1.2
Représentation en base 2p
Soit un entier a représenté en base 2 par la suite (an−1 , an−2 , . . . , a0 ). Sa représentation en base
2p découle immédiatement de la formule 1, dans laquelle on met en facteur les puissances successives
croissantes de 2p . On obtient donc cette représentation en découpant la suite (an−1 , an−2 , . . . , a0 ) en
c
Equipe
enseignement UE INF241 ALM - 19 juin 2007
1
tranches de p bits à partir de la droite (la dernière tranche étant complétée par des 0 si elle est
incomplète, c’est-à-dire si n n’est pas multiple de p). Chacune des tranches ainsi obtenues est la
représentation en base 2 d’un chiffre de la représentation de a en base 2p .
Les valeurs usuelles de p sont 3 (numération en base 8, ou octale) et 4 (numération en base 16, ou
hexadécimale)
Les chiffres octaux sont notés : 0, 1, 2, 3, 4, 5, 6, 7. Les chiffres hexadécimaux sont notés : 0, 1, 2,
3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (les lettres A,. . ., F peuvent aussi être écrites en minuscules).
Exemple.
Soit à représenter 491 sur 10 bits :
en binaire
en octal
:
:
0
en hexadécimal
:
0
0
0
0
1
0
0
1
1
0
1
1
1
7
1
1
1
1
1
1
1
0
0
5
0
E
1
1
0
0
1
0
1
1
3
1
1
1
1
B
L’intérêt des représentations octale et hexadécimale est de permettre une notation plus condensée
que la représentation binaire. Par exemple, les 256 valeurs possibles d’un octet (8 bits) se représentent
au moyen de deux chiffres hexadécimaux (00, 01, . . ., FE, FF).
1.3
Opérations
Nous associons au type entier positif les opérations binaires suivantes : addition, soustraction,
multiplication, division, ainsi que la comparaison (opération dont le résultat appartient à l’ensemble
{<, ≤, >, ≥, =, 6=}).
Il est important de noter que les opérations arithmétiques que nous considérons ne sont pas identiques aux opérations usuelles de même nom : nos opérations n’ont de sens que si les valeurs des
opérandes et du résultat appartiennent à l’ensemble des valeurs représentables, soit {0, 1, . . ., 2n − 1}.
Nous n’examinons en détail que l’opération d’addition.
Rappelons au préalable les règles de l’addition sur les bits. Cette opération est commutative et
associative. En ajoutant deux bits x et y, on obtient une somme s et une retenue r , ce que l’on résume
par la formule : (s, r) ← x ⊕ y. On réalise ainsi ce qu’on appelle un demi-additionneur (Table 2).
x
0
0
1
1
y
0
1
0
1
s
0
1
1
0
r
0
0
0
1
On a : x + y = s + 2r, s = x xor y, r = x and y
Tab. 2 – Demi-additionneur sur 1 bit
En étendant cette opération à trois bits x, y, z, on obtient un additionneur complet, qui réalise
(s, r) ← x ⊕ y ⊕ z (Table 3).
Soit maintenant à faire la somme de deux entiers positifs a et b représentés par les suites
(an−1 , an−2 , . . . , a0 ) et (bn−1 , bn−2 , . . . , b0 ). Remarquons que la somme a + b peut être supérieure à
2n − 1 et n’est donc pas nécessairement représentable. Soit s = (a + b) mod 2n (partie représentable
de la somme), et soit (sn−1 , sn−2 , . . . , s0 ) la représentation de s. On obtient les si à partir des ai et bi
par l’algorithme classique de l’addition. On note ri la retenue prise en compte au rang i (la retenue
initiale r0 est nulle et ri est engendrée au rang i − 1 pour i > 0) :
Autrement dit, on effectue la somme bit à bit de droite à gauche en reportant les retenues
c
Equipe
enseignement UE INF241 ALM - 19 juin 2007
2
x
0
0
0
0
1
1
1
1
y
0
0
1
1
0
0
1
1
z
0
1
0
1
0
1
0
1
s
0
1
1
0
1
0
0
1
r
0
0
0
1
0
1
1
1
On a : x + y + z = s + 2r
Exercice : exprimer s et r en fonction de x, y, z
Tab. 3 – Additionneur sur 1 bit
r0 ← 0 ; i ← 0 ;
while (i < n) {
(si , ri+1 ) ← ai ⊕ bi ⊕ ri ;
i ← i + 1;
}
éventuelles1 .
La dernière retenue rn , engendrée au rang n−1, est appelée report (en anglais carry) de l’opération
d’addition de a et b. On a, d’après la définition de la retenue :
a + b = s + r n 2n
(2)
La condition pour que la somme a + b soit représentée par s est donc rn = 0. Si rn = 1, alors le résultat
de l’addition ne peut être représenté sur n bits : on dit qu’il y a débordement (en anglais overflow ).
Le nombre représenté par (sn−1 , sn−2 , . . . , s0 ) est alors égal à a + b − 2n et non à a + b.
En pratique, le résultat de l’opération d’addition est un ensemble de deux éléments :
– la suite (sn−1 , sn−2 , . . . , s0 ) (n bits)
– le report rn
(1 bit).
Dans les processeurs, la valeur du report figure en général sous le nom de bit C dans le “code de
condition”, mis à jour automatiquement après l’exécution de certaines instructions. Le débordement
dans l’addition des entiers positifs2 est donc signalé par C = 1.
Dans ce qui suit, nous appelons convention standard la convention d’interprétation des n bits
d’un emplacement comme la valeur d’un entier positif de l’ensemble {0, 1,. . ., 2n −1}, et opérations
standard les opérations arithmétiques sur les entiers ainsi représentés. La convention standard est
couramment utilisée pour indiquer la valeur du contenu d’un emplacement de mémoire ; cette valeur
est généralement notée en hexadécimal pour condenser l’écriture.
2
Représentation des entiers relatifs
Il existe plusieurs conventions pour la représentation des entiers relatifs.
2.1
Valeur absolue et signe (VAS)
Dans la représentation par valeur absolue et signe, le bit de rang n − 1 est utilisé pour représenter
le signe du nombre (0 pour un nombre positif, 1 pour un nombre négatif). Les n − 1 bits restants
1
cette formulation de l’algorithme ne sert qu’à exprimer son principe ; dans la réalisation pratique, différentes optimisations réduisent le nombre d’opérations.
2
On verra plus loin (3.1) qu’il n’en est pas ainsi dans le cas des entiers relatifs, où le débordement est signalé par un
bit distinct V .
c
Equipe
enseignement UE INF241 ALM - 19 juin 2007
3
représentent la valeur absolue selon la convention standard. Cette valeur absolue peut donc prendre
les valeurs {0, 1,. . ., 2n−1 − 1}.
Avec la convention VAS, la suite de bits (an−1 , an−2 , . . . , a0 ) représente un entier a dont la valeur
est donnée par :
(3)
a = (1 − 2an−1 )(an−2 2n−2 + an−3 2n−3 + · · · + a1 21 + a0 20 )
Cette expression a l’inconvénient de ne pas être linéaire par rapport aux ai . En conséquence,
les opérations arithmétiques sur les entiers représentés en VAS n’ont pas de relation simple avec les
opérations standard sur les entiers positifs représentés par la même suite (ai ). La représentation VAS
n’est donc pas couramment utilisée. On la trouve dans certaines formes de représentation des nombres
réels.
La table 4 donne quelques valeurs particulières.
VAS
zéro (positif)
zéro (négatif)
valeur minimale
valeur maximale
0
0
−1
−(2n−1 − 1)
2n−1 − 1
0
1
1
1
0
0
0
0
1
1
0
0
0
1
1
...
...
...
...
...
0
0
0
1
1
0
0
1
1
1
Tab. 4 – Représentation en valeur absolue et signe
On notera que le nombre 0 a une double représentation.
2.2
Complément à 2 (C2)
Dans la représentation en complément à 2 (C2), de loin la plus courante, les entiers positifs 0, 1,
. . ., 2n−1 − 1 sont représentés selon la convention standard ; les entiers négatifs −2n−1 , −2n−1 + 1, . . .,
−1 sont respectivement remplacés par les entiers 2n−1 , 2n−1 + 1, . . ., 2n − 1, eux-mêmes représentés
selon la convention standard. Autrement dit, un nombre négatif a est représenté par 2n − |a|.
Le bit an−1 indique le signe du nombre (1 pour les nombres strictement négatifs, 0 autrement). En
effet, les nombres négatifs sont représentés par des nombres supérieurs ou égaux à 2n−1 , qui est le poids
du bit an−1 dans la convention standard. En désignant par std(a) la valeur obtenue en interprétant
en convention standard la suite de bits qui représente a en C2, on a :
std(a) = an−1 2n + a
(4)
Avec la convention C2, la suite de bits (an−1 , an−2 , . . . , a0 ) représente un entier a dont la valeur
est donnée par :
a = −an−1 2n−1 + an−2 2n−2 + · · · + a1 21 + a0 20
(5)
On le vérifie aisément en remplaçant le coefficient de an−1 , −2n−1 , par −2n + 2n−1 .
Nous verrons en 3.1 que la formule 5 permet de représenter les opérations arithmétiques sur
le nombre relatif a par les opérations standard correspondantes. C’est le principal intérêt de la
représentation C2.
Nous examinons maintenant quelques propriétés importantes de cette représentation.
2.2.1
Valeurs représentées
Les valeurs représentées sont −2n−1 , . . . , −1, 0, 1, . . . , 2n−1 − 1. Il y a 2n valeurs distinctes (pas de
double représentation) ; la plage des valeurs représentées n’est pas symétrique par rapport à 0. La
table 5 indique quelques valeurs particulières :
c
Equipe
enseignement UE INF241 ALM - 19 juin 2007
4
C2
valeur minimale
valeur maximale
0
−1
−(2n−1 )
2n−1 − 1
0
1
1
0
0
1
0
1
0
1
0
1
...
...
...
...
0
1
0
1
0
1
0
1
Tab. 5 – Représentation en complément à 2
2.2.2
Nombres opposés
Pour passer de la représentation de a à celle de −a, on remarque3 que std(−a) = 2n − std(a) =
Pour passer de a à −a, on doit donc inverser tous les bits de a (0 devenant 1 et 1
devenant 0), ce qui correspond à une complémentation par rapport à 2n − 1 (1 partout en convention
standard), puis ajouter 1 au nombre ainsi obtenu.
Cet algorithme s’exprime par la règle suivante : soit ai le premier bit égal à 1 à partir de la droite ;
inverser tous les bits situés à gauche de ai . Il faut que a 6= −2n−1 , car 2n−1 n’est pas représentable.
Exemple.
Soit à représenter −10 sur 6 bits.
(2n − 1 − std(a)) + 1.
+10
0 0 1 0
bits inversés →
−10
1 1 0 1
2.2.3
1 0
← bits conservés
1 0
Extension
Connaissant la représentation d’un nombre a sur n bits, on souhaite obtenir sa représentation sur
n + k bits (k > 0).
On a : 1 = 2k − 2k−1 − · · · − 20 , d’où : 2n−1 = 2n+k−1 − 2n+k−2 − · · · − 2n−1 ,
Réécrivons la formule 5 en remplaçant 2n−1 , coefficient de an−1 , par l’expression ci-dessus.
a = −an−1 2n+k−1 + an−1 2n+k−2 + · · · + an−1 2n−1 + an−2 2n−2 + · · · + a1 21 + a0 20
On en déduit l’algorithme d’extension :
1. Cadrer le nombre à droite sur n + k bits.
2. Recopier son bit de signe dans les positions n + k − 1, n + k − 2, . . . , n.
Exemple
Extension de 6 à 10 bits.
7
−7
2.3
0
1
0
1
0
1
1
0
1
0
1
1
→
→
0
1
0
1
0
1
0
1
0
1
0
1
0
1
1
0
1
0
1
1
Complément à 1 (C1)*
Dans la représentation en complément à 1, les entiers positifs {0, 1,. . ., 2n−1 − 1} sont représentés
selon la convention standard ; les entiers négatifs −2n−1 , . . . , −1, 0 sont respectivement représentés par
2n−1 , 2n−1 + 1, . . . , 2n − 2, 2n − 1. Autrement dit, un nombre négatif a est représenté par 2n − 1 − |a|
en convention standard. La représentation d’un nombre négatif en C1 s’obtient donc à partir de sa
représentation en C2 par soustraction (standard) de 1.
3
considérer séparément les cas a ≥ 0 et a < 0.
c
Equipe
enseignement UE INF241 ALM - 19 juin 2007
5
Avec la convention C1, la suite de bits (an−1 , an−2 , . . . , a0 ) représente un entier a dont la valeur
est donnée par :
(6)
a = −an−1 (2n−1 − 1) + an−2 2n−2 + · · · + a1 21 + a0 20
On a :
std(a) = an−1 (2n − 1) + a
(7)
Nous examinons maintenant quelques propriétés de cette représentation.
2.3.1
Valeurs représentées
Les valeurs représentées sont −(2n−1 − 1), . . . , −1, 0, 1, . . . , 2n−1 − 1. Cette plage est symétrique ;
le nombre 0, et lui seul, a deux représentations. La table 6 indique quelques valeurs particulières.
C1
zéro (positif)
zéro (négatif)
valeur minimale
valeur maximale
0
0
−1
−(2n−1 − 1)
2n−1 − 1
0
1
1
1
0
0
1
1
0
1
0
1
1
0
1
...
...
...
...
...
0
1
1
0
1
0
1
0
0
1
Tab. 6 – Représentation en complément à 1
Le bit an−1 indique le signe du nombre, comme en C2
2.3.2
Nombres opposés
On passe de la représentation de a à celle de −a en inversant tous les bits : en effet, l’inversion des
bits est une complémentation par rapport à 2n − 1. C’est cette propriété qui justifie principalement
l’utilisation de la convention C1.
Les opérations arithmétiques en C1 présentent une particularité (report cyclique) décrite en 3.2.
2.4
Excédent 2n−1 (E2n−1 )*
Dans la convention E2n−1 , l’ensemble des nombres représentables est identique à celui de C2,
soit {−2n−1 , . . . , −1, 0, 1, . . . , 2n−1 − 1}. Tout nombre a de cet ensemble est représenté par 2n−1 + a
en convention standard. La convention E2n−1 a l’avantage d’être uniforme pour tous les nombres
représentés ; c’est aussi la seule pour laquelle la représentation des entiers positifs ou nuls diffère de la
représentation standard.
La suite de bits (an−1 , an−2 , . . . , a0 ) représente un entier a dont la valeur est donnée par :
a = (an−1 − 1)2n−1 + an−2 2n−2 + · · · + a1 21 + a0 20
(8)
On remarque que la représentation d’un nombre en E2n−1 se déduit de sa représentation en C2 en
inversant le bit de signe (an−1 est remplacé par 1 − an−1 ).
La convention E2n−1 est utilisée dans certaines représentations des nombres réels.
2.5
Récapitulation
Récapitulons les principaux résultats sur les conventions de représentation des entiers relatifs.
La table 7 regroupe les formules donnant la valeur d’un nombre représenté par la suite de bits
(an−1 , an−2 , . . . , a0 ) selon les diverses conventions.
La table 8 montre les valeurs représentables dans les diverses conventions.
La table 9 illustre les différentes représentations dans le cas n = 4.
c
Equipe
enseignement UE INF241 ALM - 19 juin 2007
6
standard
VAS
C2
C1
E2n−1
:
:
:
:
:
a = an−1 2n−1 + an−2 2n−2 + · · · + a1 21 + a0 20
a = (1 − 2an−1 )(an−2 2n−2 + an−3 2n−3 + · · · + a1 21 + a0 20 )
a = −an−1 2n−1 + an−2 2n−2 + · · · + a1 21 + a0 20
a = −an−1 (2n−1 − 1) + an−2 2n−2 + · · · + a1 21 + a0 20
a = (an−1 − 1)2n−1 + an−2 2n−2 + · · · + a1 21 + a0 20
Tab. 7 – Formules pour la représentation des entiers sur n bits
valeurs
VAS
C2
C1
E2n−1
−2n−1
–
2n−1
–
0
−(2n−1 − 1)
2n − 1
2n−1 + 1
2n−1
1
...
...
...
...
...
−1
n−1
2
+1
2n − 1
2n − 2
2n−1 − 1
0
{2n−1 , 0}
0
n
{2 − 1, 0}
2n−1
1
1
1
1
2n−1 + 1
...
...
...
...
...
2n−1 − 1
2n−1 − 1
2n−1 − 1
2n−1 − 1
2n − 1
Tab. 8 – Valeurs représentables selon les conventions (les représentations sont en convention standard)
a3 a2 a1 a0
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
standard
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
VAS
0
1
2
3
4
5
6
7
–0
–1
–2
–3
–4
–5
–6
–7
C2
0
1
2
3
4
5
6
7
–8
–7
–6
–5
–4
–3
–2
–1
C1
0
1
2
3
4
5
6
7
–7
–6
–5
–4
–3
–2
–1
–0
E8
–8
–7
–6
–5
–4
–3
–2
–1
0
1
2
3
4
5
6
7
Tab. 9 – Représentation des entiers sur 4 bits
c
Equipe
enseignement UE INF241 ALM - 19 juin 2007
7
3
Opérations sur les entiers relatifs
Nous nous limitons à l’étude de l’addition pour les nombres représentés en C2 et en C1. Nous
traitons également le cas simple de la multiplication par une puissance de 2.
3.1
Addition en C2
Soit a un nombre représenté en C2 par la suite de bits (an−1 , an−2 , . . . , an−1 ). Rappelons que
l’entier représenté par cette suite en convention standard est noté std(a). On a :
std(a) = an−1 2n−1 + an−2 2n−2 + · · · + a1 21 + a0 20
a = −an−1 2n−1 + an−2 2n−2 + · · · + a1 21 + a0 20
Soit a et b deux nombres représentés en C2, et soit std(s) le résultat de l’addition standard de
std(a) et std(b). On a, avec les notations de 1.3 :
std(s) = std(a) + std(b) − rn 2n , avec :
sn−1 + 2rn = an−1 + bn−1 + rn−1
Le nombre s représenté en C2 par std(s) est :
s = std(s) − sn−1 2n
D’autre part, d’après l’expression de a et b, on a :
a + b = std(a) + std(b) − (an−1 + bn−1 )2n
Des quatre relations ci-dessus, on déduit :
a + b = s + (rn−1 − rn )2n
Autrement dit, la condition pour que l’addition de a et b en C2 soit correctement représentée
par l’addition standard est que rn−1 = rn . Cette condition s’exprime par la règle simple suivante :
dans l’algorithme d’addition standard, le bit “sortant” de la position n − 1 par la gauche doit être
identique au bit “entrant” dans cette position par la droite. Si cette condition n’est pas respectée, il
y a débordement.
Le tableau 10 illustre tous les cas possibles pour l’addition de deux nombres a et b représentés en
C2, le résultat étant s (l’indicateur v, ou bit V du code de condition, signale le débordement s’il est
égal à 1).
a, b
positifs
de signe
différent
négatifs
rn−1
0
1
0
1
0
1
rn
0
0
0
1
1
1
sn−1
0
1
1
0
0
1
v
0
1
0
0
1
0
résultat s
≥0
> 0 non représentable
<0
≥0
< 0 non représentable
<0
Tab. 10 – Addition en complément à 2 : report et débordement
On voit ici que le débordement n’est plus signalé par rn = 1 (ou C = 1 dans le code de condition)
comme dans le cas de l’addition standard. L’exemple ci-après (table 11) illustre les quatre cas possibles
(les reports non nuls sont notés entre parenthèses et on donne les valeurs des bits C et V ).
3.2
Addition en C1*
Procédons comme pour C2. Si a est un nombre représenté en C1, on a :
std(a) = an−1 2n−1 + an−2 2n−2 + · · · + a1 21 + a0 20
a = −an−1 (2n−1 − 1) + an−2 2n−2 + · · · + a1 21 + a0 20
Soit a et b deux nombres représentés en C1, et soit std(s) le résultat de l’addition standard de
std(a) et std(b). On a, comme en 3.1 :
c
Equipe
enseignement UE INF241 ALM - 19 juin 2007
8
100001
+ 101001
(1)001010
débordement
avec report
011000
+ 001110
100110
débordement
sans report
101011
+ 011101
(1)001000
correct
avec report
000111
+ 001001
010000
correct
sans report
V = 1, C = 1
V = 1, C = 0
V = 0, C = 1
V = 0, C = 0
Tab. 11 – Exemples d’additions en complément à 2
std(s) = std(a) + std(b) − rn 2n
sn−1 + 2rn = an−1 + bn−1 + rn−1
s = std(s) − sn−1 2n + sn−1
a + b = std(a) + std(b) − (an−1 + bn−1 )2n + an−1 + bn−1
Des quatre relations ci-dessus, on déduit :
a + b = s + rn + (rn−1 − rn )(2n − 1)
La condition de non-débordement (rn = rn−1 ) est donc la même qu’en C2. En revanche, l’algorithme d’addition de deux nombres a et b en C1 est différent et s’exprime ainsi :
– faire l’addition standard de std(a) et std(b),
– s’il y a un report (rn = 1), l’ajouter au résultat obtenu.
Le report éventuel à gauche du bit n − 1 vient donc s’ajouter aux bits de rang 0 : c’est la règle du
report cyclique.
Cette règle est illustrée par l’exemple ci-après.
résultat avant report
résultat après report
110000
111011
(1)101011
101100
correct
rn = 1
rn−1 = 1
011000
001110
100110
100110
débordement
rn = 0
rn−1 = 1
111110
100000
(1)011110
011111
débordement
rn = 1
rn−1 = 0
Tab. 12 – Exemples d’additions en complément à 1
3.3
Multiplication ou division par une puissance de 2
Pour multiplier par 2k (k > 0) un entier a représenté en C2 par (an−1 , an−2 , . . . , a0 ), on décale
cette suite de bits de k positions vers la gauche. Les k bits de plus faible poids sont remplacés par 0.
Cette opération peut donner lieu à débordement, si le résultat n’est pas représentable. On vérifiera
que la règle de non-débordement est identique à celle indiquée pour l’addition : quand un bit “sort”
vers la gauche de la position n − 1, un bit égal doit prendre sa place ; sinon, le résultat est incorrect.
En C1, la règle du report cyclique s’applique : un bit “sortant” à gauche de la position n − 1 prend
la place du bit de plus faible poids a0 .
Pour diviser un entier a par 2k en C2, on décale la suite (an−1 , an−2 , . . . , a0 ) de k positions vers
la droite. Le bit de signe an−1 est recopié dans les k positions de poids le plus fort, d’après la règle
d’extension (2.2.3). Ce mode de décalage est dit arithmétique, par opposition au décalage logique, dans
lequel les k positions de poids fort sont remplies de 0.
Si la division n’est pas exacte, le quotient obtenu est approché par l’entier relatif immédiatement
inférieur. La valeur absolue d’un quotient négatif est donc arrondie par excès. Par exemple, 1/2 donne
le quotient 0 et le reste 1, alors que −1/2 donne le quotient −1 et le reste 1.
c
Equipe
enseignement UE INF241 ALM - 19 juin 2007
9
Le reste de la division est représenté par la suite des k bits sortant vers la droite. En raison de la
règle d’arrondi du quotient, le reste est donc toujours positif ou nul.
4
Représentation des nombres fractionnaires
Nous n’abordons pas dans cette note la représentation générale des nombres réels (dits “flottants”
pour des raisons historiques). Néanmoins, nous indiquons le principe de représentation de certains
nombres non entiers au moyen de fractions binaires.
La formule 1 se généralise au cas où certains exposants sont négatifs, les poids correspondants
étant alors inférieurs à 1. On choisit m ≤ n et les n bits de l’emplacement sont séparés en deux : les
n − m bits de gauche représentent la partie entière, les m bits de droite la partie fractionnaire. La
suite de bits (an−1 an−2 . . . a0 ) est alors notée (an−1 an−2 . . . am , am−1 . . . a0 ), où la virgule4 marque la
limite entre les parties entière et fractionnaire. La valeur a représentée par cette suite se déduit de la
valeur standard par multiplication par 2−m :
a = an−1 2n−m−1 + an−2 2n−m−2 + · · · + am 20 + am−1 2−1 + am−2 2−2 + · · · + a0 2−m
(9)
Par exemple, la suite 101,1001 représente le nombre a = 5,5625. En effet, a = 1.22 + 0.21 + 1.20 +
+ 0.2−2 + 0.2−3 + 1.2−4 , soit a = 5 + 9/16. D’une manière générale, la partie fractionnaire est
égale à f.2−m , où f est la valeur représentée en convention standard par la suite de bits après la
virgule, et m est le nombre de bits de la partie fractionnaire.
D’après la formule 9, le déplacement de la virgule d’une position vers la droite ou vers la gauche
correspond respectivement à une multiplication ou à une division par 2 de la valeur représentée.
Si m = 0, on retrouve la convention standard. Si m = n, seule la partie fractionnaire est représentée,
et les nombres représentables sont donc compris entre 0 et 1 : ce sont les fractions dont le numérateur
appartient à {0, 1, . . . , 2n − 1} et le dénominateur est 2n .
Les valeurs négatives sont représentées en utilisant un bit de signe ; le complément à 2 ne s’étend
pas aux nombres fractionnaires.
1.2−1
4
la virgule est remplacée par un point dans la notation anglo-saxonne.
c
Equipe
enseignement UE INF241 ALM - 19 juin 2007
10
Téléchargement