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.
Astuces
- 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.
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.