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 :
-
0pour un nombre positif -
1pour 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 :âïž
-
Deux représentations pour 0 :
00000000et10000000. -
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âïž
-
Complément à 1 : on inverse tous les bits
-
+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 :
- Parcourez le nombre de droite Ă gauche
- Gardez tous les bits jusquâau premier
1(inclus) - 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 avec0pour le bit de signe et 151).