[Petite incursion dans l’arithmétique binaire avec ce quarante-troisième article issu de Ma petite encyclopédie.
Bonne journée à tous !]
Complément à deux
Représentation des nombres binaires en machine permettant d’effectuer efficacement les opérations arithmétiques sur les entiers relatifs (signés).
Une chaîne de n bits peut représenter les entiers relatifs contenus dans l’intervalle :
[- 2n-1, 2n-1 – 1]
On ne peut utiliser le complément à deux que pour des nombres binaires ayant la même longueur (on s’en tiendra ici aux octets).
Le bit le plus à gauche (dit de poids fort) donne le signe du nombre représenté; c’est le bit de signe. Si on représente la valeur absolue simplement par sa valeur en binaire, on a par exemple :
0000 1001 = +9 en décimal
1000 1001 = -9 en décimal
Cette manière de faire est simple mais présente deux inconvénients :
– d’une part 0 dispose de deux représentations différentes (un zéro positif et un zéro négatif en quelque sorte) :
0000 0000 et 1000 0000
– d’autre part, l’addition usuelle de deux valeurs ne donne pas la valeur de leur somme.
On a par exemple :
0000 1001 + 1000 1001 = 1000 1001
soit 9 – 9 = 137 !
Plutôt que de modifier l’algorithme de l’addition entre nombre binaires, on utilise la représentation en complément à deux.
Les nombres positifs sont représentés normalement (avec leur bit de signe à 0), la représentation de la valeur absolue des nombres négatifs est obtenue de la manière suivante :
on inverse d’abord les bits de la valeur absolue (ce qui s’appelle faire un complément à 1), puis on ajoute une unité.
Ces deux opérations reviennent à calculer 2n – |x| ou n est la longueur de la chaîne de bits utilisée.
Cette représentation permet d’éviter les deux inconvénients évoqués ci-dessus.
Exemple.
Représentation du nombre – 9 :
Le bit de signe sera à 1.
La représentation de la valeur absolue s’obtient à partir de sa représentation en binaire sur 7 bits : 000 1001. On inverse tous les bits ce qui donne 111 0110 et on ajoute 1 ce qui donne 111 0111.
En ajoutant le bit de signe, la valeur du complément à 2 de – 9 est :
1111 0111
L’addition est maintenant possible sans erreur :
Par exemple :
1111 0111 + 0000 1100 = 0000 0011 (-9 + 12 = 3)
Vidéos
La vidéo suivante explique de manière très claire comment utiliser le complément à deux :
Sur le codage des nombres négatifs :