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 44 et 11.

  1. 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.

  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.

  1. 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.

  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 :

  1. On enlève 1 : (1001 \; 0011)_2
  2. On inverse tous les bits : (0110 \; 1100)_2
  3. On lit la valeur absolue de l'entier relatif : 64+32+8+4 = 108
  4. 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.

  1. 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.

  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.

    1. L'entier positif qui correspond à cette représentation binaire « usuelle » est 137.
    2. On soustrait à cet entier 2^8 : 137 - 256 = -119.
    3. 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