Somme de deux entiers sur un octet☘
Le choix de la représentation en complément à deux a été motivé par ses avantages lors de l'addition de deux entiers avec cette écriture.
Voyons quelques exemples sur un octet.
Somme de 44 et 11.☘
-
Donner le code binaire de 44 et le code binaire de 11 en complément à deux sur 8 bits.
Réponse
44 et 11 sont des entiers positifs, ils sont codés par leur écriture binaire usuelle.
44 est représenté par (0010 \; 1100)_2.
11 est représenté par (0000 \; 1011)_2.
-
Additionner 44 et 11 à l'aide de ces codes.
Donner l'entier décimal correspondant.Réponse
On effectue la somme comme appris à l'école élémentaire (mais en base deux) :
retenues 1 0 0 1 0 1 1 0 0 + 0 0 0 0 1 0 1 1 0 0 1 1 0 1 1 1 Et (0011 \; 0111)_2 représente (55)_{10}.
Somme de 32 et -12.☘
-
Donner le code binaire de 32 et le code binaire de -12 en complément à deux sur 8 bits.
Réponse
32 est un entier positif, il est représenté par son écriture binaire usuelle : (0010 \; 0000)_2.
-12 est négatif. Son code binaire par complément à 2 est donné par l'écriture binaire de -12 + 2^8 = 244.
Or (244)_{10} est représenté usuellement par (1111 \; 0100)_2.Le code en complément à 2 sur 8 bits de -12 est donc (1111 \; 0100)_2.
-
Additionner 32 et -12 à l'aide de ces codes.
Donner l'entier décimal correspondant.Réponse
Les représentations n'étant pas les codes binaires usuels, il n'y a aucune raison pour qu'une addition binaire usuelle donne le bon résultat.
Toutefois, l'une des raisons du choix de la représentation des entiers relatifs en complément à deux est qu'elle préserve un algorithme d'addition très simple. Il suffit d'additionner (au sens usuel en binaire) les deux représentations pour obtenir le résultat :
retenues 1 1 1 0 0 1 0 0 0 0 0 + 1 1 1 1 0 1 0 0 1 0 0 0 1 0 1 0 0 Comme la représentation est sur 8 bits, le « 1 » à gauche généré par une retenue disparaît et le code binaire restant sur un octet est (0001 \; 0100)_2.
Or (0001 \; 0100)_2 est la représentation binaire en complément à deux de l'entier 2^4 + 2^2 = 20, c'est-à-dire 32-12.
Somme de -96 et -12.☘
Vérifier de même que la somme de -96 et -12 peut s'effectuer par une simple addition binaire sur les codes de ces deux entiers en complément à deux.
Solution
On a vu que -12 est représenté en complément à deux (sur 8 bits) par (1111 \; 0100)_2.
-96 + 2^8 = 160 = (1010 \; 0000)_2.
Le code en complément à deux de -96 sur 8 bits est (1010 \; 0000)_2.
L'addition :
retenues | 1 | 1 | 1 | ||||||
---|---|---|---|---|---|---|---|---|---|
1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | ||
+ | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | |
1 | 1 | 0 | 0 | 1 | 0 |
1 | 0 | 0 |
Le résultat est donc (1001 \; 0100)_2 puisque le 1 à gauche généré par la retenue n'est pas conservé sur 8 bits.
Pour retrouver l'entier négatif représenté par (1001 \; 0100)_2, on peut appliquer, à rebours, l'algorithme présenté dans la page précédente :
- On enlève 1 : (1001 \; 0011)_2
- On inverse tous les bits : (0110 \; 1100)_2
- On lit la valeur absolue de l'entier relatif : 64+32+8+4 = 108
- On en déduit que (1001 \; 0011)_2 représente l'entier -108 par complément à 2 sur un octet.
Vérification décimale : on a bien -96 -12 = -108.
Dépassement de capacité☘
On considère les entiers 112 et 25.
-
Déterminez leur représentation binaire par complément à 2 sur un octet.
Réponse
112 et 25 sont des entiers positifs, ils sont codés par leur écriture binaire usuelle.
112 est codé par (0111 \; 0000)_2.
25 est codé par (0001 \; 1001)_2.
-
La somme de ces représentations binaires est-elle la représentation par complément à 2 sur un octet de 137 ? Justifier.
Réponse
retenues 1 1 1 0 1 1 1 0 0 0 0 + 0 0 0 1 1 0 0 1 1 0 0 0 1 0 0 1 Or (1000 \; 1001)_2 est la représentation binaire en complément à deux d'un entier négatif.
- L'entier positif qui correspond à cette représentation binaire « usuelle » est 137.
- On soustrait à cet entier 2^8 : 137 - 256 = -119.
- Dès lors, la somme de la représentation par complément à 2 sur un octet des entiers 112 et 25 donne -119.
En effet, on a dépassé la valeur du plus grand entier représenté par complément à 2 sur un octet donc on a continué sur la « roue » :
Important
La représentation par complément à 2 permet de conserver l'algorithme usuel d'addition sur la plage de représentation de ces entiers signés.
Lorsque le calcul renvoie un entier qui « sort » de cette plage
de représentation, on poursuit le tour de la roue (dans un sens ou dans
l'autre) :
Un peu de culture générale
Ce type de dépassement est fréquent dans les appareils et services numériques, même les plus utilisés.
-
Les GPS : tapez "bug du 6 avril 2019" dans un moteur de recherche.
-
Youtube : Vous pouvez lire cet article tiré du journal Libération