Aller au contenu

Représentation des entiers relatifs, le complément à 2

Les entiers ne sont pas tous positifs. Il est donc indispensable de savoir reprĂ©senter des entiers signĂ©s (positifs ou nĂ©gatifs) Ă  l’aide de bits.

Se pose alors la question : Comment représenter les entiers signés et pouvoir les manipuler ?

Une méthode particuliÚrement efficace pour cela est le complément à 2.


La mĂ©thode naĂŻve : bit de signe⚓

Une premiÚre idée serait de réserver le bit de poids fort pour indiquer le signe du nombre :

  • 0 pour un nombre positif

  • 1 pour un nombre nĂ©gatif

Les autres bits serviraient Ă  stocker la valeur absolue du nombre.

Exemple sur 8 bits :

  • 00000000 : 0

  • 10000000 : 0 aussi

ProblĂšmes majeurs :⚓

  1. Deux représentations pour 0 : 00000000 et 10000000.

  2. L’addition ne fonctionne pas :

Exemple :

00000011 (+3)

+ 10000011 (naĂŻvement -3)

= 10000110 ⇒ donne -6, au lieu de 0 !


Le complĂ©ment Ă  2.⚓

La représentation en complément à 2 permet de :

  • N’avoir qu’un seul zĂ©ro

  • Effectuer les additions directement, sans traitement spĂ©cial du signe

DĂ©finition⚓

Le complĂ©ment Ă  2 d’un nombre binaire est la valeur qu’il faut lui ajouter pour obtenir 2^n, oĂč n est le nombre de bits utilisĂ©s.


Comment calculer un complĂ©ment Ă  2 ?⚓

MĂ©thode : ComplĂ©ment Ă  1 + 1⚓

  1. Complément à 1 : on inverse tous les bits

  2. +1 : on ajoute 1 au résultat

Exemple : 00101101 (45)
→ ComplĂ©ment Ă  1 : 11010010
→ +1 : 11010011
→ VĂ©rification : 00101101 + 11010011 = 00000000

L’opposĂ© d’un entier positif est donc son complĂ©ment Ă  2.


Astuce visuelle⚓

Pour inverser rapidement un nombre en complément à 2 :

  1. Parcourez le nombre de droite Ă  gauche
  2. Gardez tous les bits jusqu’au premier 1 (inclus)
  3. Inversez les bits restants

Exemple :
00010100 (20)
→ Astuce : 11101100 (−20)


Anecdote : Explosion de la fusĂ©e Ariane 5⚓

Le 4 juin 1996, une fusée Ariane 5 explose aprÚs 40 secondes de vol.
Pourquoi ? Une erreur de conversion :

Un nombre codé sur 64 bits (virgule flottante) est converti en un entier signé 16 bits, sans vérifier que le nombre ne dépasse pas la limite (overflow : débordement)

Mais ce nombre était supérieur à 32767, la limite pour un entier signé sur 16 bits ([-32768, 32767]).

Il y a donc eu un débordement, qui a engendré un crash logiciel, et uneexplosion de la fusée...

Cela montre l'importance de la gestion des intervalles pour les entiers.

Avantages du complĂ©ment Ă  2⚓

  • ZĂ©ro unique : 00000000
  • Addition standard : fonctionne directement comme pour les entiers naturels
  • Recyclage des circuits : mĂȘmes opĂ©rations pour nombres signĂ©s et non signĂ©s

Plage de valeurs en complĂ©ment Ă  2⚓

Sur n bits, on peut représenter les entiers de \(-2^{n-1}\) à \(2^{n-1}-1\).

Exemple sur 16 bits

  • de \(-2^{15}\) : 10000000 00000000 (2 octets)

Ă 

  • \(2^{15} - 1\) : 01111111 11111111 (2 octets aussi avec 0 pour le bit de signe et 15 1).