Représentation des entiers relatifs

Signaler

Le signe d’un nombre peut prendre deux valeurs (positif ou négatif), il suffit donc d’un bit pour le représenter. Mais les ordinateurs représentent les entiers négatifs à l’aide d’un codage plus approprié qui facilite les opérations arithmétiques : le complément à 2n.

I. Représentation des nombres entiers – convention

1) Le binaire non signé

Les entiers naturels sont codés sur machine en base 2 sur un nombre arbitraire de bits. Pour simplifier nos illustrations, nous considérerons des entiers codés sur 8 bits.

À noter

On peut travailler sur 8 bits en Python grâce à la fonction int8 de la bibliothèque numpy.

Dans la représentation binaire non signée, les nombres entiers naturels sont écrits en base 2.

Exemple : Le nombre « dix » en base 10, s’écrit 1010 en base 2. Dans la mémoire, sur 8 bits, il est codé 00001010.

Pour une mémoire à 8 bits, tous les entiers naturels de 0 à 255 peuvent donc être représentés de cette façon.

2) Le binaire signé

Dans la représentation en binaire signé, le bit de poids fort (le plus à gauche) sert à représenter le signe : 0 pour un entier positif et 1 pour un entier négatif.

Utiliser les n autres bits pour représenter la valeur absolue du nombre en binaire non signé pose problème : on se retrouverait avec deux zéros et l’addition ne fonctionnerait plus.

Exemple : Sur quatre bits, si on utilise l’algorithme d’addition habituel, 3 + (−2) serait égal à −5 :

PB_Bac_05230_numerique1_TT_p009-044_C01_Groupe_Schema_1

On code les nombres signés avec le complément à 2n.

II. Le complément à 2n

Ce codage permet de représenter les entiers relatifs tout en ne changeant pas d’algorithme d’addition.

1) Définitions

Prendre le complément à 1 d’un nombre consiste à inverser les 0 et les 1 de son écriture binaire. Par la suite on notera b¯ (on dit « b barre ») le complément à 1 du bit b.

Exemples : Le complément à 1 de 1001 est 0110 ; 1¯=0 et 0¯=1.

L’opposé d’un nombre x est le nombre y vérifiant x+y=0.

Exemple : L’opposé de 3 est −3 car 3 + (−3) = 0.

Le complément à 2nd’un nombre, c’est le nombre qu’il faut lui ajouter pour obtenir 2n.

2) Opposé d’un nombre en 8 bits

On remarque astucieusement qu’un nombre d’un octet plus son complément à 1 s’écrit 1111 1111.

Par exemple sur 8 bits : 1001 1010 + 0110 0101 = 1111 1111.

On note b¯ le complément à 1 du bit b (ainsi 1¯=0 et 0¯=1).

Alors, pour un nombre sur 8 bits :

(b7b6b5b4b3b2b1b0+b7¯b6¯b5¯b4¯b3¯b2¯b1¯b0¯)+1=1111 1111+1=(1)0000 0000

donc b7b6b5b4b3b2b1b0+b7¯b6¯b5¯b4¯b3¯b2¯b1¯b0¯+1=0.

Par convention l’opposé d’un nombre positif est son complément à 2taille des entiers c’est-à-dire son complément à 1, plus 1.

Exemple : On cherche l’opposé du nombre positif 3.

3 s’écrit 0000 0011 sur 8 bits. Le complément à 1 est donc 1111 1100.

L’opposé (−3) s’écrit alors 1111 1100 + 1 = 1111 1101.

Pour connaître le nombre que représente un entier négatif, on effectue la démarche inverse : on lui retranche 1 puis on prend son complément à 1.

Exemple : On cherche à quel entier relatif correspond 1011 0101. C’est un nombre négatif car son premier bit vaut 1.

On lui retranche 1 : 1011 0101 − 1 = 1011 0100.

On prend le complément à 1 de ce dernier nombre : 0100 1011.

On convertit en base 10 (en lisant de droite à gauche) : 20 + 21 + 23 + 26 = 75.

1011 0101 est donc l’écriture sur 8 bits de −75.