Complément à 1 bit à bit☘
On va retrouver ici le principe du complément à 2^n (complément à 2 sur n bits) en le présentant différemment, ce qui permettra au passage de comprendre pourquoi ce choix conserve l'addition usuelle.
Le complément à 1 bit à bit☘
Le mot binaire sur 8 bits 0110 0101 par exemple a pour complément à 1 bit à bit le code 1001 1010.
Pour obtenir un complément à 1 bit à bit d'un mot binaire sur n bits, on change donc simplement chaque 1 en 0 et chaque 0 en 1.
Une somme☘
L'entier 9 a pour code en complément à 2 sur 8 bits: 0000 1001.
Le complément à 1 bit à bit de ce mot binaire est: 1111 0110
- Additionnez 0000 1001 et 1111 0110 avec le principe d'addition usuelle, c'est à dire en considérant qu'il s'agit de l'écriture binaire de deux entiers naturels.
Solution
Cette addition est simple puisqu'elle ne génère pas de retenue.
0 | 0 |
0 |
0 | 1 | 0 | 0 | 1 | |
---|---|---|---|---|---|---|---|---|
+ | 1 | 1 |
1 |
1 | 0 | 1 | 1 | 0 |
= | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 |
- Additionnez maintenant 0000 1001 et (1111 0110 + 1) avec le principe d'addition usuelle.
- Quelle conséquence sur ce résultat si l'on suppose qu'il s'agit d'un codage des entiers sur 8 bits ?
Solution
Comme 0000 1001 + 1111 0110 = 1111 1111, si l'on ajoute 1 de chaque côté on aura bien entendu 0000 1001 + (1111 0110 + 1) = 1 0000 0000.
Mais comme on est limité à 8 bits, on ne retient que les bits tenant dans notre format et on obtient donc 0000 0000.
Ainsi 1111 0110 + 1 pourrait être considéré comme le code de l'opposé de 0000 1001 si l'on veut conserver l'addition usuelle.
Mais au fait, 1 0000 0000 est égal à ... 2^8. Donc, l'égalité 0000 1001 + (1111 0110 + 1) = 1 0000 0000 signifie simplement que (1111 0110 + 1) est en fait le complément à 2^8 de 0000 1001.
Et vous pouvez vérifier directement que -9+2^8 = 247 et que 247 a bien pour écriture en base 2: 1111 0111 = 1111 0110 + 1.
Et voilà, on a retrouvé la méthode du complément à 2 sur n bits tout en voyant une explication du fait que cette méthode conserve l'algorithme d'addition usuelle (à partir du cas des opposés).
Le principe☘
Le principe exposé sur l'exemple précédent est général:
Soit n un entier positif.
Soit x un entier compris entre 1 et 2^{n-1}. Le code en complément à 2 sur n bits de l'entier -x est le complément à 1 bit à bit du code binaire de x auquel on ajoute 1.
Exercice☘
Reprenez quelques exemples des pages sur le complément à deux et vérifiez que la méthode ci-dessus donne bien les mêmes codes.
-100 en complément à deux sur 8 bits
On a vu dans un exercice que l'entier -100dix a pour code en complément à deux sur 8 bits: 1001 1100. Vérifions cela avec notre seconde méthode.
100 a pour écriture binaire 0110 0100 (car 100 = 64+32+4).
Son complément à 1 bit à bit est 1001 1011.
Ajoutons 1, on obtient 1001 1100. CQFD.
-126 en complément à deux sur 8 bits
On avait obtenu que le code en complément à deux sur un octet de l'entier -126 est donc 1000 0010 dans les "complément à deux".
126 a pour éciture en base 2: 0111 1110. Son complément à 1 bit à bit est 1000 0001. On ajoute 1: 1000 0010.
-128 en complément à deux sur 8 bits
On a vu que -128 en complément à deux sur un octet est représenté par 1000 0000.
Vérifions avec notre méthode bit à bit:
128 = 1000 0000deux.
Prenons le complément à 1 bit à bit: 0111 1111.
Et ajoutons 1: 1000 0000. CQFD.
entier dont le complément à 2 sur 8 bits est 1011 0101.
On a vu dans la page complément à deux que l'entier représenté par 1011 0101 en complément à 2 sur 8 bits est l'entier -75. Vérifions le avec notre nouvelle approche.
Il y a un 1 à gauche, donc il s'agit du code d'un négatif.
On enlève 1, on obtient le code 1011 0100.
On prend le complément à 1 bit à bit, on obtient 0100 1011.
Et cet entier en base dix est 0100 1011deux = 64+8+2+1 = 75. CQFD.