Entiers négatifs en binaire
Les entiers positifs tiennent dans des puissances de 2. Une température, un score, une coordonnée descendent aussi en dessous de zéro. Il faut donc coder des entiers signés, et d'abord fixer la taille : 4 bits, 8 bits, 32 bits. Le domaine représentable dépend de ce choix. Sur 8 bits, le codage qu'utilisent les processeurs va de à .
Le bit de signe ne suffit pas
La première idée est simple. Le bit de gauche dit le signe : 0 pour un positif, 1 pour un négatif. Les autres bits codent la valeur absolue. Sur 4 bits, vaut , et se lit « négatif, et 001 », donc .
Deux défauts rendent cette convention inutilisable pour calculer. Il existe deux zéros : et , « plus zéro » et « moins zéro ». Et l'addition ordinaire ne tombe pas juste. Avec cette écriture, ne donne pas 0. Il faudrait un circuit spécial pour la soustraction. Les machines n'ont pas choisi ce chemin.
Le complément à deux
Le complément à deux règle les deux problèmes d'un coup. Sur bits, le bit de poids fort pèse , et les autres bits gardent leur poids positif habituel. L'addition se fait alors comme pour les positifs. La retenue qui sort des bits est ignorée. Pas de circuit à part pour soustraire : soustraire , c'est ajouter l'opposé de .
L'image utile est le compteur kilométrique. Après , si l'on recule d'un cran, tous les rouleaux passent à 9, ou ici à 1. joue le rôle de , celui de , et ainsi de suite. On n'a qu'un seul zéro, . La plage sur bits est .
Pour écrire un négatif :
- Écrire la valeur absolue en binaire, sur les bits, avec les zéros de tête.
- Inverser tous les bits. C'est le complément à un.
- Ajouter 1.
Exemple : sur 8 bits.
- Inversion :
- :
Donc en complément à deux sur 8 bits. Oublier le laisse le complément à un, qui n'est pas le codage de la machine. Changer de taille en cours de route non plus : un nombre sur 4 bits n'a pas les mêmes zéros de tête que sur 8 bits, et l'inversion ne donne pas le même résultat.
On vérifie par l'addition. Sur 4 bits, on prend , puisque 14 ne tient pas dans 4 bits en positif.
- : valeur absolue , inversion , plus un
- Somme : . On ne garde que 4 bits : .
La retenue sortie du quatrième bit est jetée. Le résultat est bien .
| Critère | Bit de signe | Complément à 2 |
|---|---|---|
| Un seul zéro | Non | Oui |
| Addition correcte | Non | Oui |
| Usage actuel | Non | Standard |
En résumé, le bit de signe seul fabrique deux zéros et casse l'addition. Le complément à deux inverse les bits puis ajoute 1. Sur bits, on représente de à . On additionne comme pour les positifs et on tronque à bits. Le bit de poids fort vaut . C'est le codage des processeurs.
