Comment utiliser cette page

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.

MotDéfinition précise
Entier relatifUn nombre entier qui peut être positif, négatif, ou nul (par opposition à un entier naturel, toujours positif ou nul).
Bit de signeLe 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 à 1Le résultat obtenu en inversant chaque bit d'un nombre binaire (chaque 0 devient 1, chaque 1 devient 0).
Complément à 2La façon standard de représenter les entiers relatifs en binaire : on prend le complément à 1, puis on ajoute 1.
n bitsLe 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

  1. On écrit la valeur positive x en binaire, sur n bits exactement (avec des 0 devant si besoin).
  2. On inverse chaque bit : les 0 deviennent des 1, et les 1 deviennent des 0. C'est le complément à 1.
  3. On ajoute 1 au résultat obtenu (avec une retenue si besoin, comme pour une addition normale).
  4. Le résultat est l'écriture de -x en complément à 2, sur n bits.

3.3 — Démonstration interactive

bit de signe bit qui vient de changer ré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

Prêt(e) pour la suite ? → Retour à l'accueil