L'idée la plus simple

Un bit pour le signe

Imaginons que l'on ait codé les nombres entier sur un octet. Grâce à ces 8 bits, on peut coder les nombres entre 0 et 255, ce qui fait 256 combinaisons possibles. Il y a une idée qui est tentante :

  • On utilise le premier bit pour indiquer le signe du nombre : 0 pour un nombre positif et 1 pour un nombre négatif
  • On utilise les 7 bits qui restent pour écrire les autres nombre.

On peut alors avoir les nombre en -127 et +127 (soit 255 possibilités. Tiens, une possibilité a disparu ?)

Exemple

Dans cet approche, \(17\) va s'écrire \(0001\ 0001\). \(-17\) s'écrira \(1001\ 0001\) (de la même façon que 17, mais avec le premier bit à 1.)

À faire vous même

Écrivez les représentations, en utilisant la méthode ci dessus sur un octet, de 127, -31, -4, 3 et 0.

  • 127 s'écrirait 0111 1111
  • -31 s'écrirait 1001 1111
  • -4 s'écrirait 1000 0100
  • 3 s'écrirait 0000 0011
  • 0 s'écrirait 0000 0000. Cependant, 1000 0000 va signifier -0 donc 0.

Le problème du zéro

Un premier problème apparaît dans cette représentation : le problème du zéro. Le nombre 0 a deux représentations différentes : 0000 0000 et 1000 0000. En soit, ce n'est pas rédhibitoire mais il n'est jamais bon en informatique d'avoir deux représentations pour représenter la même chose. Les comparaisons sont alors plus complexes et sources d'erreurs potentielles.

Le problème des additionneurs

On va travailler, pour des raisons de facilité, sur des nombres codés sur 4 bits. On peut donc avoir 16 possibilités différentes. Si ce sont des entiers non signés, on peut aller de 0 à 15. En utilisant un bit pour le signe, avec notre méthode, nous allons de -7 à +7.

Dans le chapitre sur la conception du matériel, nous avons vu que les ordinateurs sont composés de transistors, qui mis ensemble permettent de constituer des circuits intégrés et en particulier des portes logiques. Ces portes logiques, en se combinant, permettent de créer des additionneurs. L'idéal serait que ces additionneurs, qui fonctionnaient avec des entiers non signés, continuent de fonctionner avec nos entiers signés.

Circuit pour ajouter 4 bits

Le principe d'un additionneur sur 4 bit est de faire l'opération bit à bit, de la même façon que l'on a appris à faire l'addition décimale à l'école primaire. À ceci prêt que la table d'addition est beaucoup plus simple :

01
0 0 1
1 1 10

Imaginons maintenant que nous additionnons 3 et 4. L'addition en binaire se fait ainsi :

Addition de 4 et 3 en binaire

On obtient bien 7.

Essayons maintenant de voir ce que donnerait notre addition bit à bit sur la représentation des nombres entiers relatifs que nous avons choisi. Ajoutons 4 et -3.

Addition de 4 et -3 en binaire

Le résultat est -7, ce qui n'est pas du tout le résultat escompté.

À faire vous même

Faites l'addition bit à bit des représentation de 1 et -1, puis de 2 et -2. Le résultat vous semble t'il correct ?

en ajoutant bit à bit, 1 et -1 donne -2, et 2 et -2 donne -4. On devrait obtenir 0, ce n'est pas le cas.
1 et -1 donne -2, 2 et -2 donne -4

En résumé

La première idée que l'on a est d'utiliser le premier bit pour le signe, puis d'utiliser les bits restants pour la valeur. Cette idée se heurte à deux écueils :

  • Le nombre 0 a deux notations différentes
  • l'addition bit à bit ne fonctionne plus

L'idée était séduisante car très simple, mais elle ne fonctionne pas.