1. Construire une meilleure représentation
Réserver simplement un bit au signe permet de représenter des nombres positifs et négatifs.
Mais cette solution possède deux défauts importants :
- elle produit deux représentations de zéro ;
- elle complique les opérations arithmétiques.
Le complément à deux utilise une autre convention, conçue notamment pour permettre d’effectuer plus simplement les calculs.
2. Construire l’opposé
Sur 8 bits :
+37 = 0010 0101
Pour construire la représentation de son opposé, on effectue deux opérations.
Étape 1 : Inverser tous les bits
0010 0101
↓
1101 1010
Chaque
0
devient
1
et chaque
1
devient
0.
Étape 2 : Ajouter 1
1101 1010
+ 1
---------
1101 1011
- inverser tous les bits ;
- ajouter 1.
3. Un peu de vocabulaire
L’inversion de tous les bits est appelée complément à un.
L’ajout de 1 au résultat produit le complément à deux.
| 8 bits | |
|---|---|
| +37 |
0010 0101
|
| Bits inversés |
1101 1010
|
| + 1 |
1101 1011
|
| Valeur | -37 |
4. Encoder un entier relatif
Cas d’un entier positif ou nul
On utilise son écriture binaire habituelle sur n bits.
Exemple :
+37 → 0010 0101
Cas d’un entier négatif
- écrire sa valeur absolue sur n bits ;
- inverser tous les bits ;
- ajouter 1.
Sur 8 bits, donner la représentation de -51.
5. Décoder une représentation
Pour interpréter une suite de bits en complément à deux, on commence par observer le bit de poids fort.
Si le bit de poids fort vaut 0
Le nombre est positif ou nul. On lit la valeur comme un entier naturel.
Exemple :
0010 01012 = 3710
Si le bit de poids fort vaut 1
Le nombre est négatif.
Pour retrouver sa valeur absolue :
- inverser les bits ;
- ajouter 1 ;
- lire la valeur obtenue en base 10 ;
- placer le signe -.
6. Exemple de décodage
Interprétons :
1010 0101
Le bit de poids fort vaut 1 : la valeur est donc négative.
| Représentation |
1010 0101
|
|---|---|
| Inversion |
0101 1010
|
| + 1 |
0101 1011
|
0101 10112 = 64 + 16 + 8 + 2 + 1 = 91
Donc :
1010 0101 représente -91
7. S’entraîner à décoder
-
0011 0011 -
1011 0011 -
1111 1110
8. Quelles valeurs peut-on représenter ?
Sur n bits, le complément à deux permet de représenter les entiers :
-2n-1 à 2n-1 - 1
Sur 8 bits :
-128 à +127
Le complément à deux ne possède qu’une seule représentation de zéro.
La combinaison supplémentaire est utilisée pour représenter -128.
9. Additionner des entiers signés
L’un des principaux intérêts du complément à deux apparaît maintenant :
on peut utiliser la même addition binaire que pour les entiers naturels.
Exemple :
37 + 10
0010 0101
+ 0000 1010
-----------
0010 1111
Or :
0010 11112 = 4710
10. Transformer une soustraction en addition
Considérons :
41 - 23
On peut écrire :
41 + (-23)
Sur 8 bits :
+41 = 0010 1001
+23 = 0001 0111
↓ inversion
1110 1000
↓ + 1
-23 = 1110 1001
Additionnons :
0010 1001
+ 1110 1001
-----------
1 0001 0010
Le résultat est limité à 8 bits : la retenue située au-delà est ignorée.
0001 0010
qui représente :
18
12. Une représentation de taille limitée
Sur 8 bits, la plus grande valeur représentable est :
127
Considérons :
125 + 4
Mathématiquement :
125 + 4 = 129
Mais 129 ne peut pas être représenté comme entier signé sur 8 bits en complément à deux.
13. Repérer un dépassement
Lors d’une addition d’entiers signés en complément à deux, un dépassement se produit notamment lorsque :
- les deux opérandes ont le même signe ;
- le résultat obtenu possède un signe différent.
Par exemple, additionner deux nombres positifs et obtenir une représentation interprétée comme négative signale un dépassement.
14. Exercices de synthèse
-
calculer
8 - 3directement en binaire ; -
calculer
-7 - 5; -
calculer
58 - 49; -
calculer
125 + 4et analyser le résultat.
15. Bilan
| Situation | Méthode |
|---|---|
| Encoder un entier positif | Écriture binaire habituelle sur n bits |
| Encoder un entier négatif | Écrire la valeur absolue, inverser les bits, ajouter 1 |
| Décoder un MSB = 0 | Lire comme entier naturel |
| Décoder un MSB = 1 | Complément à deux, lecture de la valeur absolue, signe − |
| Soustraire | Ajouter l’opposé |
| Plage sur n bits | -2n-1 à 2n-1 - 1 |
16. Et les nombres avec une partie décimale ?
Nous savons maintenant représenter des entiers positifs et négatifs.
Mais de nombreux calculs utilisent des nombres comme :
3,14 -0,75 0,1