Architecture des ordinateurs
Corrigé du TD 2 : Arithmétique des ordinateurs (suite)
Arnaud Giersch, Benoît Meister et Frédéric Vivien
1. Indiquer la valeur codée par la suite 1101100101110101 qui représente un entier signé en complément à 2 sur 16
bits.
Correction : C’est un nombre négatif. Complément à 2 : 0010011010001011 donc −9867.
Même question avec la suite 1001000011101101.
Correction : C’est un nombre négatif. Complément à 2 : 0110111100010011 donc −28435.
2. Représentation binaire des entiers négatifs
(a) Coder sur 4 bits les entiers 7, 2, 0, −2, −7 et −8 avec les représentations suivantes :
– signe et valeur absolue ;
Correction : 0111, 0010, 0000 ou 1000, 1010, 1111, n/a
– complément à 1 ;
Correction : 0111, 0010, 0000 ou 1111, 1101, 1000, n/a
– complément à 2.
Correction : 0111, 0010, 0000, 1110, 1001, 1000
(b) Coder les entiers 61 et −61 sur un octet en utilisant la représentation par le signe et la valeur absolue. Montrer
que l’addition binaire de ces entiers ainsi codés produit un résultat incorrect. Montrer qu’en revanche le résultat
est correct si ces entiers sont codés en utilisant la représentation par le complément à 2.
Correction :
Signe et valeur absolue : Complément à deux :
00111101 (61) 00111101 (61)
+ 10111101 (−61) + 11000011 (−61)
11111010 (−122) 00000000 (0)
3. Effectuer en binaire (8 bits) les opérations 1 − 2, 51 + 127, −3 − 127, −127 + 127, −63 − 63. Préciser, pour chaque
opération, la retenue et le débordement.
Correction : On code les nombres négatifs en complément à 2.
Débordement :
– L’addition de deux nombres de signes différents ne produit jamais de débordement (la valeur absolue du résultat
est toujours inférieure au maximum des valeurs absolues des deux opérandes).
– L’addition de deux nombres de même signe produit un débordement si le signe du résultat est différent du signe
des deux opérandes.
00000001 (1) 00110011 (51) 11111101 (−3)
+ 11111110 (−2) + 01111111 (127) + 10000001 (−127)
11111111 (−1) 10110010 (−78) 01111110 (126)
retenue : 0, débordement : 0 retenue : 0, débordement : 1 retenue : 1, débordement : 1
1
10000001 (−127) 11000001 (−63)
+ 01111111 (127) + 11000001 (−63)
00000000 (0) 10000010 (−126)
retenue : 1, débordement : 0 retenue : 1, débordement : 0
4. Représentation des réels
(a) En virgule fixe, décoder le nombre binaire 11.011 puis coder en binaire le réel 11.625.
Correction :
11.0112 = 1 × 21 + 1 × 20 + 0 × 2−1 + 1 × 2−2 + 1 × 2−3 10 = [2 + 1 + 0.25 + 0.125]10 = 3.37510
11.62510 = [8 + 2 + 1 + 0.5 + 0.125]10 = 23 + 21 + 20 + 2−1 + 2−3 10 = 1011.1012
(b) En virgule flottante normalisée, coder en binaire au format simple précision le réel 12.575
Correction :
12.57510 = 1100.1001001 . . .2 = 0.11001001001 . . . × 10100 2
0|10000011|11001001001100110011001|
puis effectuer le codage inverse.
Correction : bit de signe = 0 −→ nombre positif.
exposant biaisé = 100000112 = 13110 −→ exposant : 10000011 − 01111111 = 1002 = 410
la mantisse est normalisée : 0.11001001001100110011001
0.11001001001100110011001 × 10100 2 = 1100.10010011001100110012
= 23 + 22 + 2−1 + 2−4 + 2−7 + 2−8 + 2−11
i
+2−12 + 2−15 + 2−16 + 2−19 0
1
= 12.574998855590820312510
5. Opérations en virgule flottante.
Soit a = 0.10010 × 10101 2 et b = 0.11010 × 101 2 . Calculer a + b et a × b.
Correction : Avant de faire l’addition, il faut que les deux exposants soient égaux (a = 1001 × 101 , b = 0.1101 ×
101 ). Pour faire la multiplication, on multiplie les mantisses puis on additionne les exposants. Dans les deux cas,
le résultat doit ensuite être normalisé.
0.1001 × 10101
× 0.1101 × 101
1001.0000 × 101
1001
+ 0.1101 × 101
1001
1001.1101 × 101
+ 1001
= 0.10011101 × 10101
0.01110101 × 10110
= 0.1110101 × 10101