Cette page suit toujours le même plan : le principe en une phrase, les étapes dans l'ordre exact, une démonstration interactive, le code Python, puis les points clés à retenir.
Utilisation de la démonstration
La démonstration avance uniquement quand vous cliquez sur « Suivant » ou « Précédent » : rien ne bouge tout seul. Un bouton « Lecture automatique » est disponible si vous préférez laisser les étapes défiler seules, à une vitesse que vous choisissez.
1. Vocabulaire à connaître avant de commencer
Chaque mot ci-dessous est utilisé exactement dans ce sens dans toute la page.
Mot
Définition précise
Entier relatif
Un nombre entier qui peut être positif, négatif, ou nul (par opposition à un entier naturel, toujours positif ou nul).
Bit de signe
Le bit le plus à gauche (le premier) dans une écriture en complément à 2. Il vaut 0 pour un nombre positif ou nul, 1 pour un nombre négatif.
Complément à 1
Le résultat obtenu en inversant chaque bit d'un nombre binaire (chaque 0 devient 1, chaque 1 devient 0).
Complément à 2
La façon standard de représenter les entiers relatifs en binaire : on prend le complément à 1, puis on ajoute 1.
n bits
Le nombre de cases binaires utilisées pour écrire un nombre. Plus n est grand, plus on peut représenter de valeurs différentes.
2. L'exemple utilisé dans cette page
On représente le nombre -19 en complément à 2, sur n = 8 bits (un octet).
Résultat à retrouver
-19 s'écrit 11101101 en complément à 2, sur 8 bits.
3. Le complément à 2
3.1 — Principe, en une phrase
Principe
Pour représenter -x sur n bits (x positif), on écrit x en binaire sur n bits, on inverse tous les bits (complément à 1), puis on ajoute 1 au résultat.
3.2 — Les étapes, dans l'ordre exact
On écrit la valeur positive x en binaire, sur n bits exactement (avec des 0 devant si besoin).
On inverse chaque bit : les 0 deviennent des 1, et les 1 deviennent des 0. C'est le complément à 1.
On ajoute 1 au résultat obtenu (avec une retenue si besoin, comme pour une addition normale).
Le résultat est l'écriture de -x en complément à 2, sur n bits.
3.3 — Démonstration interactive
bit de signebit qui vient de changerrésultat final
Étape 1 / 1
On représente -19 sur 8 bits.
3.4 — Code Python
def complement_a_2(x, n): """Représentation en complément à 2 de l'entier x, sur n bits.""" if x >= 0: return format(x, '0{}b'.format(n)) return format((1 << n) + x, '0{}b'.format(n))def valeur_signee(bits): """Valeur entière représentée par bits, interprétée en complément à 2.""" n = len(bits) valeur = -int(bits[0]) * 2**(n - 1) for i in range(1, n): valeur += int(bits[i]) * 2**(n - 1 - i) return valeur# Jeu de données : le même exemple que la démonstration ci-dessusprint(complement_a_2(-19, 8))# Résultat affiché : 11101101print(valeur_signee("11101101"))# Résultat affiché : -19
3.5 — Points clés à retenir
Sur n bits, les valeurs représentables en complément à 2 vont de -2ⁿ⁻¹ à 2ⁿ⁻¹ - 1.
Sur 8 bits : de -128 à 127. C'est pour cela que -128 est représentable mais pas 128.
Le bit de signe (le premier bit) a un poids négatif : -2ⁿ⁻¹, contrairement aux autres bits qui ont un poids positif.
Avantage du complément à 2 : l'addition de deux entiers relatifs se fait exactement comme une addition binaire normale, sans traitement particulier pour le signe.