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
- Choisissez une largeur de bits Sélectionnez 8, 16, 32 ou 64 bits selon le type entier que vous voulez vérifier.
- Choisissez le sens de conversion Basculez entre « décimal → binaire » et « binaire → décimal » selon le sens dont vous avez besoin.
- Saisissez une valeur Saisissez un entier décimal signé (par exemple -5) ou une chaîne binaire (par exemple 11111011).
- 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.
- 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
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.