Nombre entiers relatifs : Méthode du complément à 2

Précédemment, nous avons vu que nous pouvions coder l'ensemble des entiers naturels sans limitation, à condition d'ajouter des bits.

À présent, trouvons une méthode qui va nous permettre de coder les entier relatifs, positifs et négatifs

Proposition naïve

L'idée immédiate mais naïve consiste à consacrer le bit d'extrême gauche comme bit de signe :

  • 0 pour les nombres positifs,

  • 1 pour les négatifs.

Avec 9 bits, par exemple, on représente les entiers compris entre -255 et +255. Mais le nombre 0 est représenté deux fois, 0 0000 0000 (+0) et 1 0000 0000 (-0) et surtout la somme de deux nombres opposés n'est pas nulle, ce qui est gênant.

Ainsi, si on effectue 214 + (-214), on obtient :

bit de report

bit de signe

128

64

32

16

8

4

2

1

214

0

1

1

0

1

0

1

1

0

-214

1

1

1

0

1

0

1

1

0

Somme

1

1

1

0

1

0

1

1

0

0

Nous sommes devant 2 problèmes :

  1. on a un bit de report sur un 10ème bit...

  2. le résultat de cette somme est non nul, ce qui est inacceptable sur un plan mathématique !

Ainsi, il faut donc trouver une autre méthode...

MéthodeMéthode du complément à 2

Pour résoudre le problème, on définit le complément à 2 d'un entier positif qui représente son opposé, de manière à ce que la somme de deux entiers opposés soit bien égale à 0.

Pour obtenir le complément à 2, il suffit de retenir la recette qui est très simple et qui se déroule en deux étapes vraiment élémentaires :

  • La première étape consiste à complémenter chaque bit du nombre entier positif avec son bit de signe à 0, auquel on a ajouté le bit de signe à 0 comme dans la méthode naïve : cela signifie qu'un bit à 0 passe à 1 et un bit à 1 passe à 0. On obtient ainsi le complément à 1 :

Complément à 1

bit de signe

128

64

32

16

8

4

2

1

+214

0

1

1

0

1

0

1

1

0

complément à 1

1

0

0

1

0

1

0

0

1

  • Puis, la seconde étape consiste à ajouter le nombre 1 au complément à 1 :

Complément à 2

bit de signe

128

64

32

16

8

4

2

1

+214

0

1

1

0

1

0

1

1

0

complément à 1

1

0

0

1

0

1

0

0

1

+1

1

-214

complément à 2

1

0

0

1

0

1

0

1

0

SimulationVérification de la somme nulle...

Si on somme à présent les deux entiers opposés, soit 214 + (-214), on obtient :

bit de report

bit de signe

128

64

32

16

8

4

2

1

+214

0

1

1

0

1

0

1

1

0

-214

obtenu par la méthode du complément à 2

1

0

0

1

0

1

0

1

0

Somme

1

0

0

0

0

0

0

0

0

0

Certes, il y a un dernier report qui passe dans un dixième bit, mais sur 9 bits, la somme de deux entiers opposés est bel et bien nulle.