Aller au contenu

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 37 et 22.

  1. Donner le code binaire de 37 et le code binaire de 22 en complément à deux sur 8 bits.

    Réponse

    37 et 22 sont des entiers positifs, ils sont codés par leur écriture binaire usuelle.

    37 est représenté par (0010 \; 0101)_2.

    22 est représenté par (0001 \; 0110)_2.

  2. Additionner 37 et 22 à 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 0 1 0 1
    + 0 0 0 1 0 1 1
    0
    0 0 1 1 1
    0 1
    1

    Et (0011 \; 1011)_2 représente (59)_{10}.

Somme de 40 et -20.

  1. Donner le code binaire de 40 et le code binaire de -20 en complément à deux sur 8 bits.

    Réponse

    40 est un entier positif, il est représenté par son écriture binaire usuelle : (0010 \; 1000)_2.

    -20 est négatif. Son code binaire par complément à 2 est donné par l'écriture binaire de -20 + 2^8 = 236.
    Or (236)_{10} est représenté usuellement par (1110 \; 1100)_2.

    Le code en complément à 2 sur 8 bits de -20 est donc (1110 \; 1100)_2.

  2. Additionner 40 et -20 à 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 1
    0 0 1 0 1 0 0 0
    + 1 1 1 0 1 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 40-20.

Somme de -90 et -20.

Vérifier de même que la somme de -90 et -20 peut s'effectuer par une simple addition binaire sur les codes de ces deux entiers en complément à deux.

Solution

On a vu que -20 est représenté en complément à deux (sur 8 bits) par (1110 \; 1100)_2.

-90 + 2^8 = 166 = (1010 \; 0110)_2.
Le code en complément à deux de -90 sur 8 bits est (1010 \; 0110)_2.

L'addition :

retenues 1 1 1 1 1
1 0 1 0 0 1 1 0
+ 1 1 1 0 1 1 0 0
1 1 0 0 1 0
0 1 0

Le résultat est donc (1001 \; 0010)_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 \; 0010)_2, on peut appliquer, à rebours, l'algorithme présenté dans la page précédente :

  1. On enlève 1 : (1001 \; 0001)_2
  2. On inverse tous les bits : (0110 \; 1110)_2
  3. On lit la valeur absolue de l'entier relatif : 64+32+8+4+2 = 110
  4. On en déduit que (1001 \; 0010)_2 représente l'entier -110 par complément à 2 sur un octet.

Vérification décimale : on a bien -90 -20 = -110.

Dépassement de capacité

On considère les entiers 87 et 62.

  1. Déterminez leur représentation binaire par complément à 2 sur un octet.

    Réponse

    87 et 62 sont des entiers positifs, ils sont codés par leur écriture binaire usuelle.

    87 est codé par (0101 \; 0111)_2.

    62 est codé par (0011 \; 1110)_2.

  2. La somme de ces représentations binaires est-elle la représentation par complément à 2 sur un octet de 149 ? Justifier.

    Réponse

    retenues 1 1 1 1 1 1
    0 1 0 1 0 1 1 1
    + 0 0 1 1 1 1 1 0
    1 0 0 1 0
    1 0 1

    Or (1001 \; 0101)_2 est la représentation binaire en complément à deux d'un entier négatif.

    1. L'entier positif qui correspond à cette représentation binaire « usuelle » est 149.
    2. On soustrait à cet entier 2^8 : 149 - 256 = -107.
    3. Dès lors, la somme de la représentation par complément à 2 sur un octet des entiers 87 et 62 donne -107.

    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