1. Introduction :
Un entier relatif est stocké sur une chaîne binaire de longueur fixe, n bits (8, 16, 32, 64…).
Notons la chaîne N = bn-1bn-2…b1b0, où bn-1 est le bit de poids fort (MSB).
Historiquement, plusieurs conventions existent. Aujourd’hui, le complément à 2 est quasi universel en matériel et systèmes modernes.
2. Convention de la valeur signée (signed magnitude) :
On réserve
-
le bit de poids fort
bn-1au signe0pour un entier positif ;1pour un entier négatif.
- Les autres bits
bn-2…b0codent la valeur absolue.
Méthode :
- Pour +x : MSB = 0, valeur en binaire sur les n−1 bits restants.
- Pour −x : MSB = 1, valeur en binaire de |x| sur les n−1 bits restants.
Exemples (sur 8 bits) :
+5110→0 0110011⇒0011 00112−5110→1 0110011⇒1011 00112
Inconvénients :
-
Deux zéros :
Sur 8 bits, on a :+0 = 0000 0000−0 = 1000 0000
- Addition et soustraction mobilisaient deux circuits séparés.
- Plage représentable (sur n bits) : de
−(2n−1−1)à+(2n−1−1).
Faites-vous plaisir 1 :
En 8 bits, donner la représentation signée de +37, puis de −37.
3. Complément à 2 :
3.1 Définitions
- Complément à 1 (restreint) d’une chaîne : inversion bit à bit (0↔1).
- Complément à 2 (vrai) : (complément à 1) + 1.
| Chaîne (8 bits) | |
|---|---|
| N | 1001 10012 |
| Cplmt à 1 | 0110 01102 |
| + 1 | 0110 01112 (complément à 2) |
Faites-vous plaisir 2 :
Donner le complément à 2 de 1110 10002 (8 bits).
3.2 Décoder (base 2 → base 10) en complément à 2 :
Méthode :
- Si MSB = 0 ⇒ entier positif : valeur naturelle (somme pondérée).
- Si MSB = 1 ⇒ entier négatif :
- calculer le complément à 2 ;
- lire la valeur décimale obtenue, puis appliquer le signe (−).
Exemple 1 : 0010 01012
(MSB=0) ⇒ 20+22+25=37.
Exemple 2 :
1010 01012
(MSB=1)
| N | 1010 0101 |
|---|---|
| Cplmt à 1 | 0101 1010 |
| + 1 | 0101 1011 ⇒ 20+21+23+24+26=91 |
| Valeur | −91 |
Faites-vous plaisir 3 :
En Complément à 2 (8 bits), convertir en base 10 0011 00112.
Faites-vous plaisir 4 : Même question pour 1011 00112.
Faites-vous plaisir 5 : Même question pour 1111 11102.
3.3. Encoder (base 10 → base 2) en Complément à 2 :
Méthode :
- Pour +x : écrire x en binaire sur n bits (avec zéros de tête si besoin).
- Pour −x :
- écrire
+xen binaire (n bits) ; - inverser (complément à 1) ;
- ajouter 1 (complément à 2).
- écrire
Exemple : En 8 bits, −37 :
| +37 | 0010 0101 |
|---|---|
| Cplmt à 1 | 1101 1010 |
| + 1 | 1101 1011 ⇒ −37 |
Astuce équivalente : 28 − 37 = 256 − 37 = 219, et 219 = 1101 10112.
Faites-vous plaisir 6 :
En complément à 2 (8 bits), donner l’écriture binaire de −51.
- Un seul zéro :
0000 0000. - Addition et soustraction avec le même circuit.
- Plage des nombres représentables (sur n bits) : \([ -2^{n-1} \ ;\ 2^{\,n-1}-1 ]\).
4. Somme et différence en binaire (8 bits) :
4.1. Somme :
Exemple : 37 + 10 (sur 8 bits)
| 37 | 0010 0101 |
|---|---|
| 10 | 0000 1010 |
| Somme | 0010 1111 (= 47) |
4.2. Différence via complément à 2 :
Exemple : 41 − 23 ⇒ 41 + (−23).
| 41 | 0010 1001 |
|---|---|
| + (−23) |
23 = 0001 0111 → C2 = 1110 1001
|
| Somme | 10001 0010 (retenue hors 8 bits) → 0001 0010 = 18 |
Faites-vous plaisir 7 : En 8 bits, calculer : 8 − 3 en binaire.
Faites-vous plaisir 8 : En 8 bits, calculer : −7 − 5 (attention au dépassement possible).
Faites-vous plaisir 9 : En 8 bits, calculer : 58 − 49.
Faites-vous plaisir 10 : En 8 bits, calculer : 125 + 4 (observer l’overflow si présent).