Complément à deux
Le complément à deux est une suite d'opérations arithmétiques sur un nombre binaire relatif, destinées à rendre cohérent le résultat d'opérations entre ce type de nombres.
Explication
Sur un nombre binaire signé, on note le signe grâce au bit de poids fort du nombre (bit tout à gauche).
v 00000010 = 2 en décimal
v 10000010 = (-2) en décimal
Seulement avec cette représentation, il y a un problème, on peut représenter 0 de deux façons : 00000000 et 10000000 sont respectivement égaux à 0 et -0. De plus si on effectue une opération arithmétique entre des nombres négatifs et positifs, on obtient un résultat erroné.
00000011 + 10000100 = 10000111
Soit 3 + (-4) = (-7) au lieu de (-1)
C'est pour résoudre ces problèmes que l'on a inventé le complément à deux. On ne touche pas aux nombres binaires positifs, par contre les nombres binaires négatifs sont créés comme ceci à partir de leur opposé positif :
- On inverse les bits (opération binaire NOT), on fait ce qu'on appelle le complément à un
- On ajoute 1 au résultat
La même opération effectuée sur un nombre négatif redonne le nombre positif de départ.
Pour coder (-4) :
- On prend le nombre positif 4 : 00000100
- On inverse les bits : 11111011
- On ajoute 1 : 11111100
Le bit de signe est automatiquement mis à 1 par l'opération d'inversion. Vérifions que cette fois l'opération 3 + (-4) se fait sans erreur :
00000011 + 11111100 = 11111111
Le complément à deux de 11111111 est 00000001 soit 1 en décimal, donc 11111111 = (-1) en décimal.
