MPE43 Complément à deux

[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 :

Pour en savoir plus

Anglais

Two’s complement.

Allemand

Das Zweierkomplement oder das 2-Komplement.

Espagnol

El complemento a dos.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *