Sur cette page
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.