Complément à deux

Définition, exemple concret, explications détaillées, piège à éviter et questions corrigées. NSI, niveau Première (spécialité NSI).

💻 NSIPremière (spécialité NSI)
Sur cette page
  1. Un exemple concret
  2. Le piège à éviter
  3. Pour aller plus loin
  4. Ne pas confondre
  5. Dans ta copie
  6. À retenir
  7. Teste-toi
  8. Questions fréquentes
  9. Notions liées
DéfinitionLe complément à deux est la méthode utilisée par les ordinateurs pour représenter les entiers relatifs en binaire sur un nombre fixé n de bits. Un entier positif s'écrit en binaire classique ; un entier négatif −x est représenté par l'écriture binaire de 2^n − x. Sur n bits, on code ainsi les entiers de −2^(n−1) à 2^(n−1) − 1.

Un exemple concret

Sur 8 bits, codons −5. On écrit 5 = 00000101, on inverse tous les bits pour obtenir 11111010, puis on ajoute 1 : 11111011. Vérification : 11111011 vaut 251 en binaire non signé, et 256 − 5 = 251.

Le piège à éviter

Mettre seulement le premier bit à 1 ne donne pas l'opposé : sur 8 bits, 10000101 ne représente pas −5 mais −123. Il faut inverser tous les bits puis ajouter 1.

Pour aller plus loin

Dans cette représentation, le bit de poids fort indique le signe : 0 pour un entier positif ou nul, 1 pour un entier négatif. Mais ce bit n'est pas un simple signe : il a un poids négatif de −2^(n−1). Pour décoder un mot de 8 bits, on calcule donc −128 × b7 + 64 × b6 + … + 1 × b0. Calcul détaillé pour 11111011 : −128 + 64 + 32 + 16 + 8 + 2 + 1 = −128 + 123 = −5. Pour obtenir l'opposé d'un nombre, la méthode pratique reste la même : inverser tous les bits, puis ajouter 1.

Le grand intérêt du complément à deux est que l'addition binaire ordinaire fonctionne sans traitement particulier pour les nombres négatifs. Calculons 5 + (−5) sur 8 bits : 00000101 + 11111011 = 100000000, soit 9 bits ; la retenue qui sort à gauche est ignorée et il reste 00000000, c'est-à-dire 0. Il n'existe en outre qu'une seule représentation de zéro. Attention au dépassement de capacité : sur 8 bits, 127 + 1 donne 10000000, qui représente −128.

Ce thème relève de la représentation des données dans la spécialité NSI de Première. Sur 16 bits, on code les entiers de −32 768 à 32 767. En Python, les entiers ne sont pas limités à un nombre fixe de bits, donc on n'observe pas ce dépassement, mais il existe dans d'autres langages et dans les circuits du processeur, où la taille des mots est fixée.

Ne pas confondre

  • Binaire non signé : En binaire non signé, tous les bits ont un poids positif et 8 bits codent de 0 à 255 ; en complément à deux, le bit de poids fort a un poids négatif.
  • Signe et valeur absolue : Cette méthode se contente de réserver un bit au signe ; elle crée deux zéros et complique l'addition, ce que le complément à deux évite.
  • Complément à un : Le complément à un se limite à inverser tous les bits ; le complément à deux ajoute 1 au résultat de cette inversion.

Dans ta copie

Pour coder −20 en complément à deux sur 8 bits, j'écris d'abord 20 en binaire : 20 = 16 + 4, soit 00010100. J'inverse ensuite tous les bits, ce qui donne 11101011, puis j'ajoute 1 : j'obtiens 11101100. Je vérifie avec la définition : 11101100 vaut 128 + 64 + 32 + 8 + 4 = 236 en binaire non signé, et 256 − 20 = 236. Le bit de poids fort vaut 1, ce qui confirme que le nombre représenté est bien négatif.

À retenir

  • Sur n bits, le complément à deux code les entiers de −2^(n−1) à 2^(n−1) − 1.
  • Pour obtenir l'opposé, on inverse tous les bits puis on ajoute 1.
  • Le bit de poids fort vaut 1 pour un entier négatif.
  • L'addition binaire habituelle fonctionne aussi avec les entiers négatifs.

Teste-toi

NSI · question corrigée

Sur 8 bits, quel est le plus petit entier représentable en complément à deux ?

Voir la réponse

Réponse A. Sur n bits, on code de −2^(n−1) à 2^(n−1) − 1. Pour n = 8, cela va de −128 à 127.

NSI · question corrigée

Sur 8 bits en complément à deux, quel entier le mot 11111111 représente-t-il ?

Voir la réponse

Réponse C. 11111111 vaut 255 en non signé, et 255 − 256 = −1. On le vérifie : inverser donne 00000000, et ajouter 1 donne 00000001, soit 1.

Questions fréquentes

Comment savoir si un mot binaire représente un nombre négatif ?

En complément à deux, regarde le bit de poids fort, le plus à gauche : s'il vaut 1, le nombre est négatif. Cela suppose de connaître le nombre de bits utilisés, sinon le mot ne peut pas être interprété.

Pourquoi ne pas réserver simplement un bit au signe ?

Cette solution donne deux écritures de zéro, +0 et −0, et oblige à traiter l'addition différemment selon les signes. Le complément à deux évite ces deux inconvénients, ce qui simplifie les circuits de calcul.

Notions liées

Pour réviser tout le chapitre, va sur la page NSI, ou retrouve toutes les définitions dans le lexique du bac. Dans l'application, les quiz reprennent ces notions sur le programme de ta série.

Le matériel conseillé

Ce que je conseille pour compléter tes révisions sur RéviBac :

Liens sponsorisés. En tant que Partenaire Amazon, RéviBac réalise un bénéfice sur les achats remplissant les conditions requises.

Continue sur RéviBac

Des quiz corrigés et expliqués sur le programme officiel de ta série. Gratuit pour commencer.

Commencer gratuitement