Section 2.7
Le complément à deux
Dans cette section, nous allons nous intéresser à une façon de représenter des nombres relatifs (positifs et négatifs) en binaire. Les nombres relatifs sont très utilisés dans de nombreux domaines, que ce soit en mathématiques, en finance, en physique ou même en géographie, pour ne citer que quelques exemples. Il est donc important de pouvoir les représenter et les manipuler efficacement dans un ordinateur.
Comme nous l'avons vu dans le chapitre précédent, les circuits logiques d'un ordinateur ont un nombre fixe d'entrées et de sorties, c'est pourquoi nous nous limitons à des nombres représentés sur un nombre fixe de bits. Dans les circuits que nous avons vus jusqu'à présent, nous avons utilisé une taille de 4 bits, mais les concepts sont les mêmes pour n'importe quelle taille. Les ordinateurs de nos jours utilisent généralement des nombres représentés sur 32 ou 64 bits.
Il est important de comprendre que cette limite de taille affecte le domaine de représentation des nombres. Ainsi, si nous utilisons 4 bits pour représenter un nombre, nous ne pouvons représenter que 24, soit 16, nombres différents. Selon la méthode classique, ces 16 nombres sont les nombres de 0 à 15. Dans cette section, nous allons remettre en question cette façon de représenter les nombres afin de pouvoir représenter des nombres à la fois positifs et négatifs.
De manière intéressante, la façon de représenter les nombres que nous allons aborder nous permettra aussi de concevoir un circuit capable de réaliser des soustractions à partir d'un circuit capable d'additionner.
Approche naïve
Avant de plonger dans la méthode que nous allons adopter pour représenter les nombres relatifs en binaire, nous allons aborder une approche plus simple mais qui présente des inconvénients majeurs. Nous appellerons cette approche l'approche naïve.
L'approche naïve pour représenter les nombres relatifs en binaire est simplement de réserver un bit pour indiquer le signe du nombre. On pourrait, par exemple, utiliser le bit le plus à gauche pour uniquement indiquer le signe du nombre. Le reste des bits serait utilisé pour représenter la valeur absolue du nombre. Cette méthode de représentation est très simple, mais présente plusieurs inconvénients, comme nous allons le voir.
Selon cette méthode de représentation sur 4 bits, nous pourrions représenter les nombres de -7 à 7, comme l'indique le tableau suivant :
Pour les 8 premiers nombres, le bit de signe est à 0, ce qui indique que le nombre est positif. Pour ces nombres, la représentation est la même que celle que nous avons utilisée jusqu'à présent.
Cependant, pour les 8 derniers nombres, le bit de signe est à 1, ce qui indique que le nombre est négatif. Pour ces nombres, la représentation est différente. Il suffit cependant d'ignorer le bit de signe pour obtenir la valeur absolue du nombre.
Cette approche, bien que conceptuellement simple, présente plusieurs inconvénients. Premièrement, il y a dans ce cas deux représentations différentes pour le nombre 0, une positive (0 0 0 0) et une négative (1 0 0 0). Deuxièmement, les circuits que nous avons vus jusqu'à présent pour manipuler les nombres ne sont pas capables de traiter correctement les nombres représentés de cette façon. Par exemple, l'additionneur que nous avons vu dans ce chapitre ne donne pas le bon résultat dans le cas d'une addition impliquant un ou deux nombres négatifs représentés de cette façon. Il faudrait donc concevoir des circuits spécifiques pour manipuler les nombres représentés de cette façon.
À cause de ces inconvénients, cette approche naïve n'est pas utilisée en pratique. Une autre approche, appelée la méthode du complément à deux, est utilisée à la place. Comme nous le verrons, cette approche n'a pas les inconvénients de l'approche naïve.
Complément à deux

L'approche que nous allons voir dans cette section est appelée la méthode du complément à deux. Cette méthode est utilisée en pratique pour représenter les nombres relatifs dans les ordinateurs. Elle a l'avantage d'être relativement simple à comprendre et surtout de ne pas nécessiter de circuits spécifiques pour manipuler les nombres représentés de cette façon.
La méthode du complément est une variante simple de la méthode classique de représentation des nombres en binaire que nous avons vue dans le cadre de ce chapitre. La seule différence se situe au niveau du poids du bit le plus à gauche.
! Remarque
Le nom de la méthode du complément à deux fait référence à la notion de complément en mathématiques et à une technique de calcul des soustractions, aussi utilisable en base 10.
Poids des bits
Lorsque nous avons abordé la représentation des nombres en binaire, nous avons vu que chaque bit d'un nombre représenté en base 2 a un poids. Le poids du bit le plus à droite est 1, celui du bit directement à sa gauche est 2, puis le suivant 4, puis 8, 16, etc. Nous avions vu que pour déterminer la valeur d'un nombre représenté en binaire, il suffisait de faire la somme des poids des bits valant 1.
La méthode du complément à deux suit la même logique. Selon la méthode du complément à deux, chaque bit a exactement le même poids qu'en base 2, à l'exception du bit le plus à gauche. Le bit le plus à gauche a le poids opposé du poids qu'il aurait en base 2. Pour 4 bits par exemple, le bit le plus à gauche a un poids de -8 au lieu de 8.
Ainsi, sur 4 bits, le poids de chaque bit est le suivant : 1 pour le bit le plus à droite, 2 pour le bit suivant, 4 pour le bit suivant, et finalement -8 pour le bit le plus à gauche.
♣︎ Exemple
Prenons l'exemple de la séquence de bits suivante :
1 1 0 1
Selon la méthode du complément à deux, le bit le plus à gauche a un poids de -8, le bit à sa droite un poids de 4, le suivant un poids de 2, et le dernier un poids de 1. Pour déterminer la valeur de cette séquence de bits, il suffit de faire l'addition des poids des bits valant 1. Dans ce cas précis, on obtient donc :
-8 + 4 + 1 = -3
La séquence de bits 1101 représente donc le nombre -3 selon la méthode du complément à deux.
Selon la méthode classique, cette même séquence de bits représente le nombre 13 (8 + 4 + 1) à la place.
! Remarque
Pour toutes les séquences de bits commençant par 0, la valeur associée est la même selon la méthode du complément à deux et selon la méthode classique. Par exemple, la séquence de bits 0101 représente le nombre 5 selon la méthode du complément à deux, mais aussi en base 2.
Pour toutes les séquences de bits commençant par 1, la valeur associée est différente selon la méthode du complément à deux et selon la méthode classique. Cependant, la différence est toujours de 2n, où n est le nombre de bits. Ainsi, sur 4 bits, la différence sera de 16.
Par exemple, la séquence de bits 1101 représente le nombre -3 selon la méthode du complément à deux, mais le nombre 13 selon la méthode classique. Il y a bien une différence de 16 entre ces deux nombres.
Domaine de représentation
Grâce aux poids des bits, nous pouvons déterminer la valeur associée à n'importe quelle séquence de bits selon la méthode du complément à deux. Ainsi, ci-dessous se trouve un tableau récapitulatif des nombres représentables sur 4 bits selon la méthode du complément à deux.
Comme vous pouvez le constater à la lecture du tableau ci-dessus, les nombres représentables sur 4 bits selon la méthode du complément à deux vont de -8 à 7, soit un total de 16 nombres. Il est possible de représenter des nombres plus grands en utilisant plus de bits. Par exemple, sur 8 bits, il est possible de représenter des nombres allant de -128 à 127, soit 256 nombres.
De manière générale, sur n bits, il est possible de représenter les nombres allant de -2n - 1 à 2n - 1 - 1. La valeur absolue de la borne supérieure est plus petite de 1 que celle de la borne inférieure car le 0 est compté dans les nombres positifs.
Signe d'un nombre
Selon la méthode du complément à deux, le bit le plus à gauche d'un nombre indique son signe. Si ce bit vaut 0, le nombre est positif (ou nul), alors que s'il vaut 1, le nombre est négatif.
Incrémentation
La procédure d'incrémentation d'un nombre en complément à deux est identique à celle d'un nombre en base 2 sur un nombre fixe de bits. Ainsi, il suffit de trouver le 0 le plus à droite de la séquence de bits, et de le remplacer par un 1. Tous les bits à sa droite sont alors remplacés par des 0.
Cette méthode fonctionne aussi bien pour les nombres positifs que pour les nombres négatifs.
À noter que l'on passe arrive à -8 lorsqu'on incrémente à partir de 7 sur 4 bits. En effet, 7 est représenté par 0111. En incrémentant on obtient donc 1000, qui vaut -8 en complément à deux. On parle alors d'un dépassement de capacité. En effet, le résultat attendu dépasse le domaine de représentation. On tombe alors sur un autre nombre que celui attendu.
Addition
De même que pour l'incrémentation, l'addition de deux nombres en complément à deux est identique à celle de deux nombres en base 2 sur un nombre fixe de bits. Ainsi, il suffit de procéder à l'addition bit à bit, en notant la retenue à chaque étape. L'éventuelle retenue de la dernière addition est ignorée.
Ainsi, le circuit que nous avons vu pour l'addition de deux nombres en base 2 peut être utilisé pour l'addition de deux nombres en complément à deux. Ci-dessous se trouve le circuit de l'additionneur 4 bits que nous avons vu précédemment. Sur les nombres en entrée et en sortie, un afficheur est utilisé pour afficher en base 10 la valeur du nombre lue selon la méthode du complément à deux.
★ À essayer
Utilisez le circuit ci-dessus pour calculer des additions de nombres en complément à deux.
! Remarque
Il est possible d'obtenir un nombre négatif en additionnant deux nombres positifs en utilisant le circuit ci-dessus. Par exemple, pour l'addition de 7 et 7, on obtient un résultat de -2 en complément à deux sur 4 bits. On parle alors de dépassement de capacité.
De même, il est possible d'obtenir un nombre positif en additionnant deux nombres négatifs. Par exemple, en effectuant -7 + (-4), on obtient un résultat de 5 en complément à deux sur 4 bits, car -11 n'est pas représentable sur 4 bits. On parle aussi dans ce cas de dépassement de capacité, voire de soupassement.
Calcul de l'opposé
L'opposé d'un nombre est le nombre qui, ajouté au premier, donne 0. Par exemple, l'opposé de 5 est -5, car 5 + (-5) = 0. Pour les nombres exprimés selon la technique du complément à deux, il est très facile de calculer la représentation de l'opposé d'un nombre. Pour cela, il suffit de réaliser une série de deux opérations sur la représentation du nombre :
- Inverser tous les bits du nombre.
- Ajouter 1 au résultat.
Le résultat de ces deux opérations est la représentation en complément à deux de l'opposé du nombre.
♣︎ Exemple
Par exemple, pour calculer l'opposé de 5, on prend la représentation en complément à deux de 5 (ici sur 4 bits) :
0 1 0 1
On commence par inverser tous les bits, ce qui donne :
1 0 1 0
Pour finir, on ajoute 1 au résultat, ce qui donne le résultat final :
1 0 1 1
Cette séquence de bits représente ainsi l'opposé de 5, c'est-à-dire -5.
♣︎ Exemple
Pour calculer l'opposé de 0, on prend la représentation en complément à deux de 0 (ici sur 4 bits) :
0 0 0 0
On commence par inverser tous les bits, ce qui donne :
1 1 1 1
Pour finir, on ajoute 1 au résultat, ce qui donne le résultat final :
0 0 0 0
Ici, l'addition donne lieu à une retenue, qui est simplement ignorée. Cette séquence de bits représente ainsi l'opposé de 0, c'est-à-dire -0. La représentation en complément à deux de -0 est identique à celle de 0, ce qui est pratique car 0 et -0 sont égaux.
! Remarque
Cette technique fonctionne pour tous les nombres représentables en complément à deux, à l'exception de -2n-1, où n est le nombre de bits utilisés pour représenter le nombre. En effet, le nombre 2n-1 n'est pas représentable en complément à deux. Lorsque l'on applique la procédure de calcul de l'opposé à ce nombre, on obtient le nombre lui-même.
Prenons l'exemple d'un nombre représenté sur 4 bits. Le nombre -23 = -8, qui est représenté selon la technique du complément à deux par la séquence de bits 1 0 0 0 n'a pas d'opposé (car 8 n'est pas représentable sur 4 bits selon la technique du complément à deux). Lorsque l'on applique la procédure de calcul de l'opposé à ce nombre, on obtient le nombre lui-même. En effet, on commence par la représentation en complément à deux de -8, qui est 1 0 0 0. On inverse tous les bits, ce qui donne 0 1 1 1, puis on ajoute 1, ce qui donne 1 0 0 0, soit le nombre de départ.
On remarque aussi qu'appliquer deux fois la procédure de calcul de l'opposé d'un nombre donne le nombre de départ. Pour votre culture, on dit que le calcul de l'opposé est involutif.
♣︎ Exemple
Pour calculer l'opposé de -5, on prend la représentation en complément à deux de -5 (ici sur 4 bits) :
1 0 1 1
On commence par inverser tous les bits, ce qui donne :
0 1 0 0
Pour finir, on ajoute 1 au résultat, ce qui donne le résultat final :
0 1 0 1
Cette séquence de bits représente ainsi l'opposé de -5, c'est-à-dire 5.
Soustracteur
Grâce au calcul de l'opposé, et en se basant se le circuit de l'additionneur vu à la section précédente, il est possible de construire un circuit qui effectue une soustraction. On appelle ce circuit un soustracteur.
Pour effectuer une soustraction entre deux nombres, il suffit de calculer l'addition entre le premier opérande et l'opposé du deuxième opérande. Le circuit peut être implémenté de la manière suivante :
Dans le circuit, on profite de la retenue d'entrée du premier additionneur complet pour effectuer l'addition de 1 nécessaire au calcul de l'opposé du deuxième opérande.
★ À essayer
Essayez de changer les nombres en entrée pour vérifier que le circuit calcule bien une soustraction.
! Remarque
Le circuit fonctionne aussi bien pour les nombres relatifs représentés en complément à deux que pour les nombres positifs représentés en binaire selon la méthode habituelle.
! À maîtriser
Avant de poursuivre, assurez-vous de pouvoir :
- Expliquer l'intérêt de la méthode du complément à deux, en particulier par rapport à la méthode naïve.
- Déterminer le signe d'un nombre représenté en complément à deux.
- Lire un nombre représenté en complément à deux.
- Écrire un nombre en complément à deux.
- Calculer l'opposé d'un nombre représenté en complément à deux.
- Expliquer comment construire un soustracteur à partir d'un additionneur.