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.
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 :
0 | 1 | |
---|---|---|
0 | 0 | 1 |
1 | 1 | 10 |
Imaginons maintenant que nous additionnons 3 et 4. L'addition en binaire se fait ainsi :
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.
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 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.