Aller au contenu

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.