Skip to content

Calculateur de complément à deux et d'entiers signés

Saisissez un entier signé et obtenez d'un coup signe-valeur absolue, complément à un, complément à deux et binaire décalé, de 4 à 64 bits. Ou collez un motif de bits ou un octet hexadécimal et lisez les cinq interprétations.

Sans pistage Fonctionne dans le navigateur Gratuit
Tout est calculé localement dans votre navigateur — rien de ce que vous saisissez n'est envoyé.
Largeur en bits

Du décimal à la représentation machine

Saisissez un nombre entier signé. Les quatre représentations sont calculées d'un coup — vous n'avez pas besoin de savoir à l'avance laquelle votre système utilise.

Essayez ceci
Encodage Bits Hex
Signe-valeur absolue 1000 0101 85
Complément à un 1111 1010 FA
Complément à deux 1111 1011 FB
Binaire décalé 0111 1011 7B

Du motif de bits à la valeur

Vous avez trouvé un octet dans un dump mémoire ou un registre et vous ne savez pas comment il doit être lu. Collez-le et voyez d'un coup ce qu'il signifie sous chaque interprétation — laquelle est la bonne dépend du système qui l'a produit, donc toutes sont affichées.

Lu comme Valeur
Non signé 251
Signe-valeur absolue -123
Complément à un -4
Complément à deux -5
Binaire décalé 123
Table de référence 8 bits

Calculée par le moteur qu'utilise l'outil ci-dessus, ces valeurs ne peuvent donc pas s'en écarter.

Décimal Signe-valeur absolue Complément à un Complément à deux Binaire décalé Hex
127 0111 1111 0111 1111 0111 1111 1111 1111 7F
100 0110 0100 0110 0100 0110 0100 1110 0100 64
10 0000 1010 0000 1010 0000 1010 1000 1010 0A
5 0000 0101 0000 0101 0000 0101 1000 0101 05
1 0000 0001 0000 0001 0000 0001 1000 0001 01
0 0000 0000 0000 0000 0000 0000 1000 0000 00
-1 1000 0001 1111 1110 1111 1111 0111 1111 FF
-5 1000 0101 1111 1010 1111 1011 0111 1011 FB
-10 1000 1010 1111 0101 1111 0110 0111 0110 F6
-100 1110 0100 1001 1011 1001 1100 0001 1100 9C
-127 1111 1111 1000 0000 1000 0001 0000 0001 81
-128 1000 0000 0000 0000 80
Plages de valeurs par largeur en bits
Largeur Complément à deux / binaire décalé Signe-valeur absolue / complément à un
4 -8 … 7 -7 … 7
8 -128 … 127 -127 … 127
16 -32768 … 32767 -32767 … 32767
32 -2147483648 … 2147483647 -2147483647 … 2147483647
64 -9223372036854775808 … 9223372036854775807 -9223372036854775807 … 9223372036854775807
Chaque encodage est vérifié par la suite de tests sur les cinq largeurs, y compris la plage 4 bits complète, les deux motifs du zéro et la valeur la plus négative de chaque largeur. Les résultats 64 bits sont recoupés avec les fonctions BigInt.asIntN et BigInt.asUintN de JavaScript. — Équipe d'ingénierie Go-Tools · 9 sept. 2026

Conçu et vérifié par l'équipe d'ingénierie Go Tools.

Réponses rapides

Combien vaut −5 en complément à deux sur 8 bits ?

11111011 11111011, soit 0xFB.

Quelle est la plage d'un octet signé ?

-128 … 127 −128 à 127 en complément à deux ; −127 à 127 en signe-valeur absolue et en complément à un.

Comment retrouver le nombre à partir d'un motif en complément à deux ?

valeur − 2^n Si le bit de poids fort vaut 0, lisez-le comme non signé ; s'il vaut 1, soustrayez 2^n de la lecture non signée.

0xFF signifie-t-il −1 ou 255 ?

−1 ou 255 −1 en octet signé, 255 en octet non signé. Les bits seuls ne le décident pas.

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

Le complément à deux répond à une question de matériel, pas de mathématiques : comment stocker les nombres négatifs pour que l'additionneur déjà construit continue de fonctionner ? L'astuce consiste à représenter −x par le motif de 2^n − x. L'addition boucle alors modulo 2^n et tombe sur la bonne réponse sans aucun cas particulier lié au signe, ce qui évite d'avoir à câbler un circuit distinct pour la soustraction.

Deux conséquences en découlent et toutes deux apparaissent dans de vrais bugs. D'abord, la plage est dissymétrique : huit bits couvrent −128 à 127, pas −128 à 128, parce qu'il faut bien répartir les motifs et qu'il n'y a pas de zéro négatif pour équilibrer les deux côtés. Ensuite, le signe n'est pas un drapeau que l'on peut retirer — le bit de poids fort de 11111011 vaut 1, mais la valeur est −5 et non −123, donc lire un nombre négatif suppose d'interpréter le mot entier, pas un seul bit.

Le signe-valeur absolue et le complément à un sont les deux conceptions qui ont perdu. Elles méritent encore d'être connues parce que la virgule flottante IEEE 754 a gardé la disposition signe-valeur absolue, et parce que c'est cette comparaison qui fait paraître le complément à deux inévitable plutôt qu'arbitraire.

// -5 as an 8-bit byte, three ways to arrive at the same pattern
0b00000101        // 5
~0b00000101       // 11111010  ones' complement of 5
~0b00000101 + 1   // 11111011  two's complement = -5

// In JavaScript the width matters: bitwise operators are 32-bit,
// so anything wider has to go through BigInt.
BigInt.asIntN(8, 0xFBn)                 // -5n
BigInt.asUintN(8, -5n)                  // 251n
BigInt.asIntN(64, 0xFFFFFFFFFFFFFFFBn)  // -5n

// C23 made two's complement mandatory for signed integers.
// Before that, the other two encodings were legal but unused.

Ce que fait ce calculateur

Quatre encodages d'un coup

Signe-valeur absolue, complément à un, complément à deux et binaire décalé sont calculés ensemble. Le binaire décalé est celui que la plupart des calculateurs omettent, et c'est celui que les fiches techniques d'ADC continuent d'employer.

Décodage à partir d'un motif de bits

Collez les bits ou l'hexadécimal que vous avez sous la main et lisez les cinq interprétations, non signé compris. C'est le sens dont vous avez besoin quand un dump contredit le nombre annoncé par l'appareil.

Correct sur 64 bits

Chaque valeur passe par BigInt, donc 0xFFFFFFFFFFFFFF9C donne bien −100 et non le résultat d'une troncature à 32 bits.

Honnête sur ce qui n'a pas de représentation

Sur 8 bits, −128 n'a ni forme signe-valeur absolue ni forme complément à un. Le tableau le dit au lieu d'imprimer un motif qui ne désigne pas ce nombre.

Le zéro négatif rendu visible

Saisissez 0 et le second motif de bits du zéro en signe-valeur absolue et en complément à un s'affiche, ce qui reste l'argument le plus clair en faveur du complément à deux.

Tableaux de référence sans JavaScript

Le tableau comparatif 8 bits et les plages par largeur sont rendus à la construction de la page, par le moteur qui alimente les champs interactifs, si bien qu'ils ne peuvent pas s'en écarter.

Comparaison avec les autres façons de vérifier

La conversion fournie par votre langage

API d'exécution

BigInt.asIntN, le int.from_bytes(..., signed=True) de Python et les types de largeur fixe de C donnent la réponse faisant autorité pour le code que vous écrivez. Utilisez-les dans le code ; utilisez cette page quand vous avez une valeur sous les yeux et aucun interpréteur ouvert.

La vue mémoire d'un débogueur

Fonction d'IDE

Elle affiche la valeur avec le type déclaré par le programme, c'est-à-dire exactement l'information qui manque à un motif de bits. Elle ne sert plus quand les octets sont arrivés par un lien sans type déclaré — c'est ce cas-là que cette page traite.

Convertisseur de base

Sur ce site

Il convertit entre bases, mais seulement pour des valeurs positives ou nulles — les négatifs y sont explicitement refusés, car une base n'a aucun avis sur la façon dont un signe est stocké. La représentation signée est le travail de cette page ; le convertisseur de base s'occupe des valeurs absolues.

Le pendant en virgule flottante. Il conserve une disposition signe-valeur absolue plutôt qu'un complément à deux et décale l'exposant de 2^(e−1)−1, donc les deux pages répondent à des questions différentes sur le même mot mémoire.

Exemples résolus

−5 dans un octet 8 bits

-5, largeur 8
signe-valeur absolue 1000 0101
complément à un      1111 1010
complément à deux    1111 1011  (0xFB)
binaire décalé       0111 1011

Les trois encodages s'accordent sur le bit de signe et divergent sur tout le reste. Seule la ligne du complément à deux correspond à ce que contient réellement un int8_t en C.

L'octet 0xFB, lu de cinq façons

0xFB, largeur 8
non signé            251
signe-valeur absolue -123
complément à un      -4
complément à deux    -5
binaire décalé       123

−128 n'a pas de forme signe-valeur absolue

-128, largeur 8
signe-valeur absolue aucune représentation
complément à un      aucune représentation
complément à deux    1000 0000  (0x80)
binaire décalé       0000 0000

Le signe-valeur absolue et le complément à un dépensent chacun un motif de bits pour le zéro négatif : ils vont donc de −127 à 127 et n'atteignent pas −128. Les outils qui affichent un octet ici se trompent.

Une valeur de registre 64 bits

0xFFFFFFFFFFFFFF9C, largeur 64
complément à deux -100
non signé         18446744073709551516

Tout ce qui dépasse 32 bits doit passer par BigInt. Les opérateurs |, << et >>> de JavaScript tronquent silencieusement à 32 bits, d'où la réponse fausse — et non l'erreur — que renvoient ici certains calculateurs en ligne.

Comment utiliser le calculateur de compléments

  1. 1

    Choisir la largeur en bits

    4, 8, 16, 32 ou 64. Ce n'est pas une préférence d'affichage : les mêmes bits désignent des nombres différents selon la largeur, se tromper change donc la réponse.

  2. 2

    Saisir un décimal signé

    Tapez un nombre entier, signe négatif compris. Les quatre encodages se mettent à jour au fil de la frappe, chacun accompagné de sa forme hexadécimale.

  3. 3

    Ou remonter depuis les bits

    Collez une chaîne binaire ou une valeur 0x dans le champ de décodage pour voir ce que ce motif exact signifie sous chaque interprétation, lecture non signée comprise.

  4. 4

    Lire les avertissements quand ils apparaissent

    La page signale les deux cas qui piègent tout le monde : la valeur la plus négative n'a ni forme signe-valeur absolue ni forme complément à un, et le zéro possède un second motif de bits dans ces deux encodages.

Erreurs qui produisent de mauvaises réponses

Oublier le +1

Inverser les bits donne le complément à un. S'arrêter là décale d'une unité par rapport au complément à deux, et l'erreur passe facilement inaperçue parce que le résultat ressemble toujours à un nombre négatif plausible.

✗ Incorrect
5   = 00000101
~5  = 11111010   <- ones' complement, not -5
✓ Correct
5        = 00000101
~5       = 11111010
~5 + 1   = 11111011   <- -5 in two's complement

Utiliser des opérateurs bit à bit 32 bits sur une valeur 64 bits

JavaScript tronque à 32 bits les opérandes des opérateurs bit à bit. La moitié haute disparaît sans erreur, donc le résultat est faux plutôt qu'absent.

✗ Incorrect
0xFFFFFFFFFFFFFFFB        // 18446744073709552000  -- the literal is already rounded
~0xFFFFFFFFFFFFFFFB + 1   // 0  -- silently wrong, expected -5
✓ Correct
BigInt.asIntN(64, 0xFFFFFFFFFFFFFFFBn)   // -5n

Étendre une valeur négative par des zéros

Élargir en complétant par des zéros ne conserve le nombre que s'il est positif. Pour une valeur négative, le bit de signe doit être recopié sur tous les nouveaux bits.

✗ Incorrect
int8  0xFB  (-5)
int16 0x00FB  (251)   <- zero-extended
✓ Correct
int8  0xFB  (-5)
int16 0xFFFB  (-5)    <- sign-extended

Donner une forme signe-valeur absolue à la valeur la plus négative

Sur huit bits, −128 n'a ni représentation signe-valeur absolue ni représentation complément à un, parce que ces deux encodages dépensent chacun un motif pour le zéro négatif. Lui imprimer 10000000, c'est confondre la réponse du complément à deux avec un encodage incapable d'exprimer ce nombre.

✗ Incorrect
-128 sign-magnitude: 10000000   <- that pattern means -0
✓ Correct
-128 sign-magnitude: no representation at width 8
-128 two's complement: 10000000

Quand on en a réellement besoin

Lire un registre de capteur
Un registre de température renvoie 0xFF9C. En non signé cela fait 65436, ce qui n'est pas une température. Sur une largeur de 16, la ligne complément à deux donne −100, et avec un facteur d'échelle de 0,1 °C le capteur annonce −10,0 °C.
Déboguer un protocole aux champs non typés
Modbus, CAN et la plupart des télémétries binaires transportent des mots bruts sans indication de signe. Quand un client et un appareil ne s'entendent pas sur une valeur, comparer les deux lectures du même mot désigne en général le côté qui a fait la mauvaise hypothèse.
Exercices d'architecture des ordinateurs
Signe-valeur absolue, complément à un, complément à deux et binaire décalé forment le quatuor classique d'un cours d'introduction. Les avoir côte à côte à la même largeur rend les différences visibles au lieu de les faire apprendre par cœur.
Traquer un dépassement d'entier
Quand un compteur saute de 2147483647 à −2147483648, voir les deux comme des motifs 32 bits montre que la retenue est tombée dans le bit de signe. La valeur n'est pas devenue absurde, elle a bouclé exactement comme l'encodage le prévoit.
Écrire du code de sérialisation
Avant de faire confiance à un encodeur écrit à la main, vérifiez une valeur négative par largeur sur cette page. Une erreur de signe s'écrit vite et produit une sortie structurellement irréprochable jusqu'à l'arrivée du premier vrai nombre négatif.

Comment se construisent les quatre encodages

Signe-valeur absolue
Le bit de poids fort porte le signe et les n−1 bits restants portent la valeur absolue, lue comme un simple nombre non signé. La plage va de −(2^(n−1)−1) à 2^(n−1)−1, symétrique, avec deux zéros. C'est la disposition retenue par IEEE 754 pour la virgule flottante.
Complément à un
Une valeur négative est l'inverse bit à bit de sa valeur absolue, autrement dit 2^n − 1 − x. Même plage et mêmes deux zéros qu'en signe-valeur absolue. L'addition exige une retenue circulaire, précisément la complication que le complément à deux supprime. En anglais la place de l'apostrophe n'est pas une coquille : ones' complement se rapporte à un mot entièrement à 1, tandis que two's complement se rapporte à une seule puissance de deux.
Complément à deux
Une valeur négative −x est stockée sous la forme 2^n − x. La plage va de −2^(n−1) à 2^(n−1)−1, délibérément dissymétrique, avec un seul zéro. L'addition, la soustraction et la multiplication du mot de poids faible ignorent toutes le signe, et c'est toute la raison de sa victoire.
Binaire décalé
Stocke valeur + 2^(n−1), donc −2^(n−1) devient tout à zéro et les motifs se trient dans le même ordre que les valeurs qu'ils encodent. Cela revient au motif du complément à deux dont on inverse le bit de poids fort. Méfiez-vous du vocabulaire : les champs d'exposant IEEE 754 sont décalés de 2^(e−1)−1, une unité de moins que le décalage utilisé ici.
Pourquoi l'arithmétique passe par BigInt
JavaScript convertit les opérandes de &, |, ~ et des décalages en entiers 32 bits avant l'opération puis reconvertit ensuite, donc une valeur 64 bits perd sa moitié haute sans qu'aucune erreur ne soit levée. Toutes les conversions de cette page se font sur des entiers de précision arbitraire, ce qui explique aussi l'exactitude des extrêmes 64 bits.

Traiter correctement les valeurs signées

Fixer la largeur avant tout le reste
Un motif de bits n'a aucune valeur tant que vous n'avez pas dit sur combien de bits porte le champ. La plupart des désaccords entre une fiche technique et un débogueur se ramènent à un côté qui suppose 16 bits et l'autre 32.
Traiter la valeur la plus négative comme un cas particulier
Sa négation déborde à toutes les largeurs — en complément à deux, −(−128) vaut encore −128 pour un octet signé. Tout code qui calcule une valeur absolue doit prévoir cette entrée, et toute suite de tests devrait la contenir.
Ne jamais déduire des données si un champ est signé
Aucune inspection des bits ne dira si un champ est signé. Prenez l'information dans la fiche technique, le schéma ou la définition de la structure ; deviner marche jusqu'à la première valeur négative en production.
Étendre le signe lors d'un élargissement
Recopier un 0xFB 8 bits dans un champ 16 bits sous la forme 0x00FB transforme −5 en 251. Élargir une valeur signée suppose de recopier le bit de signe, ce qui donne 0xFFFB.
Préférer la conversion fournie par le langage
BigInt.asIntN en JavaScript, int.from_bytes(..., signed=True) en Python et les types de largeur fixe en C disent ce qu'ils font et gèrent les bords. Les ~x + 1 écrits à la main sont la source des bugs de largeur.

Questions fréquentes

Qu'est-ce que le complément à deux, en une phrase ?
C'est la convention selon laquelle un nombre négatif −x est stocké sous le motif de bits de 2^n − x, ce qui permet à l'addition et à la soustraction de partager le même circuit et ne laisse qu'un seul zéro sur la droite numérique.
Comment calculer un complément à deux à la main ?
Écrivez la valeur absolue en binaire, inversez chaque bit, puis ajoutez 1. Pour 5 sur huit bits : 000001011111101011111011. L'inversion seule donne le complément à un, ce qui explique pourquoi les deux ne diffèrent jamais que de 1.
Pourquoi −128 tient-il dans un octet signé alors que +128 n'y tient pas ?
Le complément à deux est délibérément dissymétrique. Sur n bits il couvre −2^(n−1) à 2^(n−1)−1, parce qu'il ne gaspille pas un motif pour le zéro négatif comme le font le signe-valeur absolue et le complément à un. La case ainsi gagnée tombe du côté négatif.
11111011 vaut-il −5 ou 251 ?
Les deux, et les bits seuls ne trancheront pas. La réponse dépend du type déclaré par le système qui les a produits. C'est pourquoi le décodage de cette page affiche toutes les lectures à la fois au lieu d'en choisir une pour vous — prenez la ligne qui correspond à votre int8_t ou à votre uint8_t.
Qu'est-ce que le binaire décalé et où le rencontre-t-on ?
Le binaire décalé (aussi appelé code excédentaire ou excédent-K) stocke valeur + 2^(n−1), si bien que la plus petite valeur devient tout à zéro et que trier les motifs bruts comme des entiers non signés trie aussi les valeurs signées. On le trouve en sortie de convertisseurs ADC et DAC et dans certains formats d'échantillons audio. Attention, les exposants IEEE 754 utilisent un autre décalage — 2^(e−1)−1, pas 2^(e−1) — ne transposez pas le nombre d'un cas à l'autre.
Pourquoi un registre Modbus affiche-t-il 65436 quand le capteur annonce −100 ?
Modbus transporte des mots de 16 bits sans aucune information de type, donc un client qui suppose du non signé affiche 65436 alors que l'appareil voulait dire la valeur −100 en complément à deux. Collez ici 65436 sous forme hexadécimale 0xFF9C avec une largeur de 16 et la ligne complément à deux donne la lecture visée.
Le signe-valeur absolue et le complément à un servent-ils encore ?
Rarement pour les entiers — pratiquement tous les processeurs actuels utilisent le complément à deux, que C23 a fini par rendre obligatoire. Ils restent utiles parce que la virgule flottante IEEE 754 a conservé une disposition signe-valeur absolue, et parce qu'on les demande encore en examen d'architecture des ordinateurs.
Pourquoi certains calculateurs se trompent-ils sur les valeurs 64 bits ?
Les opérateurs bit à bit de JavaScript convertissent d'abord leurs opérandes en entiers 32 bits, donc une page qui écrit ~x + 1 perd silencieusement la moitié haute d'une valeur 64 bits et affiche un résultat plausible mais faux. Cet outil travaille de bout en bout avec BigInt, d'où l'accord des lignes 64 bits avec ce qu'affiche votre débogueur.
Qu'est-ce que le zéro négatif et pourquoi est-ce gênant ?
En signe-valeur absolue, 00000000 et 10000000 signifient tous deux zéro ; en complément à un, ce sont 00000000 et 11111111. Deux comparaisons qui devraient être égales peuvent donc différer bit à bit. Le complément à deux n'a qu'un seul zéro, ce qui a supprimé toute une classe de cas particuliers matériels.
Ce que je saisis part-il vers un serveur ?
Non. La page envoie le moteur de conversion à votre navigateur et l'exécute chez vous. Les dumps de registres et les valeurs de firmware viennent souvent de systèmes que vous n'avez pas le droit de partager, il n'y a donc rien à croire sur parole ici — l'onglet réseau suffit, aucune requête n'est émise.

Convertisseur de Base — Binaire, Hex, Décimal & Octal

Outils de conversion

Convertissez entre binaire, hexadécimal, décimal, octal et toute base (2-36) instantanément. Gratuit, privé, 100 % dans votre navigateur.

Calculateur chmod — Permissions de fichiers Linux

Outils de conversion

Convertissez les permissions de fichiers Linux entre octal (755, 644) et symboles rwx. Obtenez les commandes chmod, repérez les réglages risqués comme 777 — gratuit, directement dans votre navigateur.

Convertisseur de couleurs — HEX, RGB, HSL et OKLCH

Outils de conversion

Convertissez HEX en RGB, HSL, OKLCH, OKLAB et CMYK dans votre navigateur — copiez n'importe quel format en un clic. Gratuit, sans inscription, vos couleurs ne quittent jamais la page.

Convertisseur HEX vers CMYK

Outils de conversion

Convertissez n'importe quelle couleur HEX en CMYK dans votre navigateur. Approximation naïve basée sur sRGB pour les aperçus d'impression. Gratuit, instantané, sans inscription, vos couleurs restent locales.

Convertisseur HEX vers HSL

Outils de conversion

Convertissez n'importe quelle couleur hex en HSL dans votre navigateur — hex à 3, 6 et 8 chiffres avec alpha pris en charge. Gratuit, instantané, sans inscription, vos couleurs ne quittent jamais la page.

Convertisseur HEX vers OKLCH

Outils de conversion

Convertissez HEX en OKLCH pour les tokens de design Tailwind v4. Sortie perceptuellement uniforme en direct avec alertes de gamut chromatique Display P3. Gratuit, dans le navigateur.