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.

Problème. Comment obtenir une représentation de -37 à partir de celle de +37 ?

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
Complément à deux. Pour obtenir l’opposé d’un entier représenté sur n bits :
  1. inverser tous les bits ;
  2. 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

  1. écrire sa valeur absolue sur n bits ;
  2. inverser tous les bits ;
  3. ajouter 1.
À vous de jouer.

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 :

  1. inverser les bits ;
  2. ajouter 1 ;
  3. lire la valeur obtenue en base 10 ;
  4. 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

Sur 8 bits en complément à deux, déterminer la valeur décimale de :
  • 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

Pourquoi la plage n’est-elle pas symétrique ?

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

Idée essentielle. La soustraction peut être transformée en addition de l’opposé.

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.

Dépassement. Lorsqu’un résultat sort de la plage représentable, il y a overflow ou dépassement.

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

Sur 8 bits en complément à deux :
  1. calculer 8 - 3 directement en binaire ;
  2. calculer -7 - 5 ;
  3. calculer 58 - 49 ;
  4. calculer 125 + 4 et 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
Idée centrale. Une suite de bits n’a de sens qu’avec une convention d’interprétation et un nombre de bits fixé.

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

Nouveau problème. Comment représenter des nombres possédant une partie fractionnaire avec un nombre limité de bits ?