Aller au contenu

Codage en complément à deux

On explique le codage utilisé sur un type "entier signé sur un octet" (on se limite à un octet afin de faciliter la manipulation, les entiers en jeu étant ainsi plus petits qu'avec 16 bits).

Combien?

Combien d'entiers peut-on coder sur 8 bits?

Combien

On dispose de 28 = 256 codes différents.

Lesquels?

  • Si sur ces 8 bits, on code uniquement les entiers positifs à partir de 0 (par leur écriture en base 2), quel est le plus grand entier codé?
réponse

On code les entiers de 0000 0000deux = 0 à 1111 1111deux = 255.

  • Si on décide d'utiliser ces codes sur 8 bits pour coder les entiers d'un intervalle [ emin; emax] comportant autant d'entiers strictement négatifs que d'entiers positifs ou nuls, que valent emin et emax?
réponse

La moitié de 2^8 est 2^7. On code donc 2^7 entiers strictement négatifs (de -1 à -2^7) et 2^7 entiers positifs ou nuls (de 0 à 2^7-1).
Le plus petit sera -27 = -128.
Le plus grand sera 27 - 1 = 127.

Complément à M

Soit M un nombre.

Pour un nombre x, on appelle complément à M le nombre y tel que x+y = M.

Exemple

Le complément à 16 de x=5 est y=11 car 5+11=16.

Remarque

Le complément à M de x est bien entendu obtenu par l'opération M-x.

Complément à 2^8

  • Quels sont les entiers naturels dont l'écriture en base deux utilise 8 bits et qui commence par 1 ?
Solution

Le plus petit est 1000 0000deux = 128.
Le plus grand est 1111 1111deux = 255.

  • Quels sont les compléments à 2^8 des entiers précédents ?
Solution

Ce sont les entiers entre 2^8 - 255 = 1 et 2^8 - 128 = 127.

Important

Si l'on écrit tous ces entiers en binaire avec 8 bits, les écritures des entiers entre 1 et 127 commencent par un 0 (à gauche) et les entiers complémentaires à 2^8 (compris entre 128 et 255) ont une écriture qui commence par un 1 (à gauche).

Coder les entiers relatifs en machine

Sur 8 bits, on va chercher à coder les entiers relatifs de -128 = -2^7 à 127 = 2^7-1 (pour coder autant de négatifs que de positifs ou nul).

Le codage utilisé est en général le codage dit en complément à 2 sur 8 bits défini ci-dessous:

  • les entiers naturels (entre 0 et 127) sont représentés par leur écriture binaire usuelle.
  • les entiers négatifs (entre -128 et -1) sont représentés par le complément à 2^8 de leur valeur absolue. En d'autres termes, pour un entier négatif n (où -128 \leqslant n \leqslant -1), on utilise l'écriture en base deux de l'entier 2^8 - \left|n\right| = 2^8+n.

Remarque

Avec ce choix (cf exercice précédent), les entiers positifs ou nul (entre 0 et 127) ont une écriture en complément à 2 sur 8 bits qui commencent (bit de gauche) par 0,
tandis que les négatifs (entiers entre -128 et -1) ont une écriture en complément à 2 sur 8 bits qui commencent (bit de gauche) par 1.

Exercice

  • Donnez le code en complément à deux sur 8 bits de l'entier 75.
  • Donnez le code en complément à deux sur 8 bits de l'entier -75.
75

L'entier 75 est représenté par son écriture binaire usuelle (obtenue par exemple par l'algorithme des divisions en cascade): 0100 1011.

-75

La valeur absolue de -75 est bien entendu 75. Le complément à 2^8 de 75 est 2^8 - 75 = 181. L'écriture binaire de 181 est 1011 0101.

La représentation en complément à deux sur 8 bits de -75 est donc 1011 0101.