Calculateur de complément à deux (conversion binaire d'entiers signés)

Convertit un entier décimal signé en son motif binaire en complément à deux sur 8/16/32/64 bits, ou effectue la conversion inverse. Affiche aussi l'interprétation non signée, la notation hexadécimale, et détecte les valeurs hors plage.

Qu'est-ce que le complément à deux ?

Le complément à deux est le procédé utilisé par les ordinateurs pour représenter les entiers signés — des nombres pouvant être positifs ou négatifs — sous forme de simples motifs de bits. Les nombres positifs sont stockés en binaire ordinaire, tandis qu'un nombre négatif s'obtient en inversant chaque bit de sa valeur absolue puis en ajoutant un. Le bit de poids fort (MSB) joue aussi le rôle de signe : 1 signifie négatif, 0 signifie positif, et la plage représentable dépend de la largeur de bits choisie (8, 16, 32 ou 64 bits).

Cet outil convertit un entier décimal signé en son motif binaire en complément à deux selon la largeur de bits choisie, et peut aussi convertir dans l'autre sens, d'une chaîne binaire vers un décimal. En plus du résultat principal, il affiche l'interprétation non signée des mêmes bits, la notation hexadécimale, ainsi qu'une comparaison avec la représentation signe-magnitude, pour que vous voyiez concrètement comment un même motif de bits peut signifier des choses différentes selon la façon dont il est lu.

Comment utiliser le calculateur de complément à deux

  1. Choisissez une largeur de bits Sélectionnez 8, 16, 32 ou 64 bits selon le type entier que vous voulez vérifier.
  2. Choisissez le sens de conversion Basculez entre « décimal → binaire » et « binaire → décimal » selon le sens dont vous avez besoin.
  3. Saisissez une valeur Saisissez un entier décimal signé (par exemple -5) ou une chaîne binaire (par exemple 11111011).
  4. Lisez le résultat de la conversion La valeur décimale signée et non signée, le motif en complément à deux et la notation hexadécimale apparaissent ensemble.
  5. Vérifiez l'alerte de plage/dépassement Saisissez une valeur hors de ce que la largeur de bits peut contenir pour voir exactement où se situe la limite du dépassement.

Astuces pour en tirer le meilleur parti

  • Un entier signé sur 8 bits va de -128 à 127. Essayez de saisir 127 puis 128 pour observer la limite du dépassement de capacité en action : 128 ne rentre pas et déclenche l'erreur de plage, exactement là où se produirait le basculement vers -128.
  • La ligne « décimal non signé » lit le même motif de bits sans traiter le bit de poids fort comme un signe. La comparer avec la ligne signée rend immédiatement visible la différence entre les deux interprétations.
  • Une entrée binaire doit comporter exactement autant de chiffres que la largeur de bits sélectionnée : 8 chiffres pour 8 bits, 16 pour 16 bits, et ainsi de suite.
  • Les calculs sur 64 bits utilisent BigInt en interne plutôt que le type Number de JavaScript, si bien que les valeurs proches de 2^63 sont converties sans aucune perte de précision.
  • Cet outil est aussi utile pour comprendre le comportement de dépassement de capacité des entiers dans des langages comme C et Java, où les types int (32 bits) et long (64 bits) basculent exactement à ces mêmes limites.

Cas d'usage du complément à deux

Réviser pour des cours ou examens d'informatique

Résolvez à la main les exercices de conversion binaire présents dans presque tous les cours d'introduction à l'informatique et vérifiez vos réponses.

Déboguer des dépassements d'entiers en C ou dans l'embarqué

Reproduisez à la largeur de bits réelle une valeur inattendue d'une variable int ou uint8_t pour localiser précisément l'origine du problème.

Comprendre comment les registres du processeur stockent les valeurs

Quand un débogueur affiche la valeur hexadécimale d'un registre, vérifiez rapidement quel entier signé ce motif représente réellement.

Vérifier des résultats d'opérations bit à bit

Avant et après avoir écrit une logique AND/OR/décalage, confirmez à la main que le motif de bits obtenu correspond à vos attentes.

Glossaire du complément à deux

Complément à deux
Une façon de représenter les nombres négatifs en inversant chaque bit de la valeur absolue puis en ajoutant un. Cela donne à zéro un motif unique et sans ambiguïté, et permet au même circuit additionneur de gérer à la fois l'addition et la soustraction, ce qui explique pourquoi presque tous les processeurs modernes l'utilisent pour les entiers signés.
Bit de signe
Le bit de poids fort (MSB) d'un motif de bits. En complément à deux, une valeur de 1 signifie que le nombre est négatif et 0 qu'il est positif.
Dépassement de capacité (overflow)
Ce qui se produit lorsqu'un résultat ne tient plus dans la largeur de bits disponible. Le bit de poids fort excédentaire est éliminé, ce qui change la signification du bit de signe et fait apparaître la valeur comme basculant vers l'autre extrémité de la plage.
Entier signé vs non signé
Un même motif de bits peut représenter deux valeurs différentes selon que le bit de signe est traité comme un indicateur de nombre négatif (signé) ou simplement comme un bit de valeur supplémentaire (non signé).
Largeur de bits
Le nombre de bits utilisés pour stocker un entier. Les largeurs courantes sont 8, 16, 32 et 64 bits : plus le type est large, plus la plage de valeurs représentables est grande.
Complément à un
Un procédé plus ancien qui forme un nombre négatif en inversant simplement tous les bits de la valeur positive, sans ajouter 1. Il a l'inconvénient de produire deux motifs distincts pour zéro (« +0 » et « -0 »), un problème que le complément à deux a été conçu pour éliminer.

Questions fréquentes

La représentation signe-magnitude et le complément à un aboutissent tous deux à deux motifs de bits distincts pour zéro (« +0 » et « -0 »), ce qui complique les circuits de comparaison et d'arithmétique. Le complément à deux ne possède qu'un seul motif de bits pour zéro et, tout aussi important, le même circuit additionneur qui effectue l'addition peut aussi effectuer la soustraction. Ces deux propriétés permettent aux concepteurs de processeurs de simplifier l'unité arithmétique et logique, raison pour laquelle presque tous les processeurs modernes utilisent en interne le complément à deux pour les entiers signés.

De -128 à 127. Comme le bit de poids fort est réservé au signe, seuls 128 motifs distincts existent côté positif (0 à 127), mais le côté négatif peut représenter 128 valeurs distinctes (-1 à -128), car le complément à deux ne possède qu'un seul motif de bits pour zéro, laissant un motif supplémentaire disponible côté négatif — d'où la plage asymétrique.

Le complément à un forme un nombre négatif en inversant simplement chaque bit de la valeur positive. Le complément à deux va un cran plus loin en ajoutant 1 après l'inversion. Cette étape supplémentaire élimine le « problème des deux zéros » inhérent au complément à un (00000000 pour « +0 » et 11111111 pour « -0 »), ce qui explique pourquoi le complément à deux est devenu la norme.

Comme la largeur de bits est fixe, tout résultat arithmétique dépassant la plage représentable voit son bit de poids fort tronqué, ce qui change la signification du bit de signe. Par exemple, ajouter 1 au maximum signé sur 8 bits, 127, produit le motif de bits 10000000, interprété comme -128 selon les règles signées. Dépasser la limite supérieure vous ramène à la limite inférieure ; ce saut contre-intuitif est exactement ce qu'est le dépassement de capacité.

Le motif de bits lui-même ne change pas, mais sans traiter le bit de poids fort comme un signe, chaque bit apporte simplement sa valeur positionnelle habituelle. Par exemple, le motif sur 8 bits 11111011 vaut -5 lu en signé, mais 251 lu en non signé. Cette réinterprétation exacte se produit en pratique chaque fois que vous utilisez un type « non signé », comme unsigned int en C, sur une valeur auparavant traitée comme signée.
Tool-kun

Anecdote — Pourquoi les ordinateurs utilisent le complément à deux

Le complément à deux n'est pas la seule façon de représenter des nombres négatifs en binaire. La représentation signe-magnitude (où seul le bit de poids fort sert d'indicateur de signe) et le complément à un (qui inverse simplement les bits d'un nombre positif) ont tous deux été utilisés historiquement. Les deux partagent un même défaut : ils aboutissent à deux motifs de bits distincts pour zéro, « +0 » et « -0 », ce qui complique la logique de comparaison et la conception des circuits. Le complément à deux évite entièrement ce « problème des deux zéros » : chaque motif de bits correspond exactement à une valeur entière.

Un avantage encore plus important du complément à deux est que le même circuit additionneur utilisé pour l'addition peut aussi effectuer la soustraction, puisque soustraire un nombre revient à additionner son complément à deux. Le processeur n'a pas besoin de savoir ni de se soucier qu'une valeur soit positive ou négative : il additionne simplement des motifs de bits et obtient le bon résultat dans les deux cas. Cela permet à l'unité arithmétique et logique (UAL) de se passer complètement d'un circuit de soustraction dédié, raison pour laquelle pratiquement toutes les architectures de processeurs modernes ont adopté le complément à deux pour les entiers signés.

Le dépassement de capacité des entiers est une conséquence directe de cette représentation. Ajouter 1 au maximum signé sur 8 bits, 127 (01111111), fait simplement basculer le motif de bits vers 10000000, qui, interprété comme une valeur signée, vaut -128. En C, le dépassement de capacité d'un entier signé est techniquement un comportement indéfini, ce qui signifie que les optimisations du compilateur peuvent produire des résultats surprenants près de cette limite, méritant donc une réelle prudence en code de production. Java, en revanche, précise que le dépassement bascule silencieusement, un exemple intéressant de la façon dont les garanties de comportement peuvent différer entre langages même lorsque la représentation binaire sous-jacente est identique.