Des entiers naturels aux entiers relatifs
Nous savons maintenant représenter un entier naturel par une suite de bits.
Par exemple, sur 8 bits :
1310 = 0000 11012
Mais cette représentation ne prévoit aucun symbole pour écrire un signe + ou -.
Comment représenter alors -13 si la machine ne manipule toujours que des 0 et des 1 ?
Une première idée
Une solution paraît assez naturelle : réserver l’un des bits pour indiquer le signe du nombre.
Par exemple, on pourrait décider que :
-
0signifie « positif » ; -
1signifie « négatif ».
Cette idée permet bien de distinguer des nombres positifs et négatifs.
Mais une représentation informatique ne doit pas seulement permettre de mémoriser une valeur.
Elle doit également permettre à la machine de calculer avec cette valeur.
Représenter ne suffit pas
Un ordinateur doit pouvoir effectuer des opérations faisant intervenir des nombres positifs et négatifs.
Par exemple :
8 - 3 12 + (-5) -7 + 4
La convention choisie pour représenter les nombres négatifs doit donc être compatible avec les opérations effectuées par la machine.
Comment représenter les entiers négatifs avec des bits tout en permettant à la machine de calculer simplement avec eux ?
Il faut choisir une convention
Une même suite de bits peut être interprétée de plusieurs manières.
Par exemple :
1111 0011
ne signifie rien à elle seule.
Pour lui donner une valeur, il faut connaître :
- le nombre de bits utilisés ;
- le type de donnée représenté ;
- la convention choisie pour interpréter ces bits.
Les bits ne portent pas eux-mêmes leur signification.
C’est la convention de représentation qui permet de les interpréter.
Notre parcours
Nous allons résoudre ce problème en deux étapes.
1. Pourquoi le complément à deux ?
Nous commencerons par étudier une idée simple : réserver un bit pour représenter le signe.
Cette représentation semble naturelle, mais nous découvrirons qu’elle présente plusieurs difficultés, notamment lorsqu’il faut effectuer des calculs.
2. Utiliser le complément à deux
Nous découvrirons ensuite comment le complément à deux permet de représenter les entiers négatifs.
Nous apprendrons à encoder et décoder des entiers, à déterminer les valeurs représentables, puis à effectuer des calculs avec leurs représentations binaires.
Une question pour commencer
Supposons que nous disposions de 8 bits.
Nous savons déjà écrire :
+13 → 0000 1101
Une première idée consisterait à utiliser le bit de gauche pour indiquer le signe.
On pourrait alors imaginer :
-13 → 1000 1101
Cette représentation fonctionne-t-elle réellement lorsque nous voulons effectuer des calculs ?