Aller au contenu principal
CalcMax

Convertisseur de binaire en décimal

Résultat

11

Décimal

Valeurs de position
8 + 2 + 1

Un convertisseur de binaire en décimal réécrit un nombre écrit en base deux dans la même valeur écrite en base dix. La valeur ne change pas — seule la notation change. La numération de position est tout le sujet : un chiffre vaut sa valeur faciale multipliée par une puissance de la base, et le système binaire prend simplement deux comme base. Vous connaissez déjà la règle par le décimal : 352, c’est trois centaines plus cinq dizaines plus deux unités, parce que chaque position vaut dix fois celle qui est à sa droite. En binaire, chaque position vaut deux fois celle de droite, elles se suivent donc 1, 2, 4, 8, 16, 32 et ainsi de suite, et les chiffres ne sont jamais que 0 ou 1. Convertir revient alors à additionner les positions qui portent un 1 et à laisser de côté celles qui portent un 0 : 1011, c’est 8 plus 2 plus 1, soit 11. C’est cette somme que la page imprime sous la réponse, un terme par bit allumé, parce que c’est l’étape que l’on rate quand on la fait de tête — on saute une position, ou on commence à compter du mauvais bout. Les chiffres se lisent en partant de la droite et non de la gauche : le bit le plus à droite vaut toujours 1, quelle que soit la longueur du nombre.

La valeur de position de chaque bit d’un octet, du plus à gauche au plus à droite

BitPuissanceValeur
72⁷128
62⁶64
52⁵32
42⁴16
32³8
22²4
12¹2
02⁰1

C’est la règle avec laquelle la conversion se fait, et elle est fixe : elle ne change pas quand la saisie au-dessus change, il n’y a donc pas de contradiction quand les deux semblent se contredire. Le panneau répond pour le nombre que vous avez tapé ; le tableau répond à la question plus générale de ce que vaut chaque rang d’un octet, qui est la question qu’on se pose d’abord quand on n’a pas encore de nombre en main. Lisez les lignes vers le bas en divisant par deux à chaque fois et vers le haut en doublant, et la régularité s’explique d’elle-même : le bit de droite vaut 1 parce que c’est le rang des unités, celui d’à côté vaut 2 parce que la base est deux, et chaque pas vers la gauche double. S’il s’arrête après huit lignes, c’est que l’octet est le format sous lequel vivent les valeurs que l’on convertit réellement — un indicateur d’état, un canal de couleur, un masque de permissions — et qu’un tableau courant jusqu’au cinquante-troisième bit serait un mur de chiffres que personne ne lit. Les bits allumés d’un nombre se relèvent sur ce tableau puis s’additionnent : le tableau et la somme imprimée au-dessus décrivent donc les mêmes huit rangs de deux façons différentes. Une mise en garde sur le sens : les numéros de bit de ce tableau se comptent depuis la droite, le bit 0 est donc le dernier chiffre, et un document qui compte ses bits depuis la gauche contredira ce tableau à chaque ligne tout en disant la même chose.

Formule

1011 = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8 + 2 + 1 = 11

binary
Le nombre à lire, écrit en base deux. Ses chiffres sont 0 et 1 et rien d’autre, et la valeur du nombre entier dépend de la place de chaque chiffre plutôt que de leur nombre
2ⁿ
La valeur de position d’un rang : deux élevé à la puissance qui mesure la distance de ce rang au bout droit, le rang le plus à droite comptant pour zéro. La suite est 1, 2, 4, 8, 16, 32, 64, 128 et chaque pas vaut le double du précédent
chiffre × 2ⁿ
Un terme de la somme. Comme le chiffre vaut 0 ou 1, la multiplication ne change jamais rien — un 1 apporte toute sa valeur de position et un 0 n’apporte rien du tout, ce qui réduit la conversion à la sélection des rangs qui portent un 1
Σ
L’addition de tous les termes. C’est toute la conversion : additionnez les valeurs de position des bits allumés et le total est le nombre en décimal
8 + 2 + 1
La somme écrite sans les termes nuls, c’est-à-dire telle qu’on la pose à la main. 1011 a des uns dans les rangs 8, 2 et 1 et un zéro dans le rang 4, donc le 4 n’apparaît jamais — voir qu’il manque est précisément l’intérêt, puisque c’est l’étape que l’on perd de vue
53 bits
La longueur maximale de la saisie : cinquante-trois chiffres binaires, soit 9 007 199 254 740 991. C’est la largeur à partir de laquelle une machine cesse de distinguer deux entiers voisins, donc une saisie plus longue ne peut pas être lue exactement et elle est refusée plutôt que devinée

C’est une conversion dont on a besoin dans les deux sens de lecture. Le cas direct est une valeur arrivée en binaire qu’il faut comprendre : un octet d’état imprimé par un débogueur, la colonne d’indicateurs d’un registre matériel, un masque de bits dans un fichier de configuration, la sortie d’un outil réseau, ou un exercice dont la réponse doit être écrite en base dix. Le cas inverse est le raisonnement en puissances de deux qui se cache derrière des nombres ordinaires — savoir si un nombre est une puissance de deux, quelle est la puissance de deux juste au-dessus d’une valeur, combien de bits il faut pour stocker un nombre, ou quelle plage un bus d’une largeur donnée peut adresser — et toutes ces questions se répondent en regardant quels rangs sont allumés. Les programmeurs retrouvent la même somme en calculant un masque de sous-réseau, en empaquetant plusieurs petites valeurs dans un entier, ou en vérifiant quelles options un nombre stocké a activées. La sortie des valeurs de position fait aussi de la page un outil pédagogique : la règle de la retenue et le poids des rangs sont les deux choses qui paraissent arbitraires tant que la somme n’est pas écrite, et voir la page écrire cette somme pour ce que vous avez tapé transforme un exemple corrigé d’un livre en vérification de votre propre essai. Quiconque lit un nombre binaire à la main, et quiconque veut savoir pourquoi la réponse est celle-là plutôt que seulement ce qu’elle est, en tire la même chose.

Exemples détaillés

  1. Lire 1011

    1. Écrivez les valeurs de position sous les quatre chiffres, en partant de la droite : 1, 2, 4, 8
    2. Gardez les chiffres qui valent 1 et laissez tomber ceux qui valent 0 : il reste 8, 2 et 1
    3. Le rang du 4 porte un 0, il n’apporte donc rien et n’apparaît pas dans la somme
    4. Additionnez : 8 + 2 + 1 = 11

    Le cas par défaut, et celui qui montre le terme manquant : 1011 porte un zéro au rang des quatre, la somme s’écrit donc 8 + 2 + 1 et non 8 + 4 + 2 + 1. Lire ces chiffres comme des chiffres décimaux donnerait mille onze, ce qui est la façon la plus répandue de rater cette conversion.

  2. Lire un octet complet, 10110010 en binaire

    1. Huit chiffres, donc les valeurs de position vont de 128 à 1
    2. Les rangs allumés sont 128, 32, 16 et 2
    3. Additionnez : 128 + 32 = 160, plus 16 donne 176, plus 2 donne 178
    4. La plus grande valeur qu’un octet puisse contenir est 11111111 en binaire, soit 255

    À dérouler une fois, parce que l’octet est la largeur sous laquelle arrive presque toute valeur binaire en pratique, et parce que savoir que le bit de gauche vaut 128 et celui de droite 1 est ce qui rend un octet lisible d’un coup d’œil. Les huit mêmes chiffres lus par l’autre bout donneraient tout autre chose : le sens de lecture n’est donc pas un détail.

  3. Les zéros de tête ne changent pas la valeur

    1. Les quatre zéros de tête occupent les rangs 128, 64, 32 et 16
    2. Un zéro n’apporte rien où qu’il soit placé, ces rangs sortent donc de la somme
    3. Il reste le même 8 + 2 + 1 qu’avant, soit 11

    Compléter une valeur jusqu’à une largeur fixe est normal — un octet s’écrit 00001011 en binaire plutôt que 1011 quand la largeur compte — le convertisseur doit donc accepter les deux formes et donner la même réponse pour chacune. C’est ce qu’il fait, et la somme imprimée est identique parce que les zéros de tête n’y entrent jamais.

  4. Lire une valeur négative, -1011 en binaire

    1. Le signe moins ne fait pas partie du nombre binaire — c’est un signe placé devant lui
    2. Lisez les chiffres comme avant : 1011 en binaire vaut 8 + 2 + 1 = 11
    3. Remettez le signe : la valeur est -11

    Le signe reste à l’extérieur des chiffres plutôt que d’être replié dedans, faute de largeur fixe où le replier. Un processeur qui stocke -11 sur huit bits écrirait 11110101, une suite de chiffres entièrement différente qui suppose de savoir que la largeur est de huit. Cette page n’a pas de largeur, le signe reste donc un signe.

Limites

Cette page ne lit que des nombres binaires entiers. Il n’y a pas de virgule binaire, donc « 1.01 » n’est pas accepté et ne peut pas être converti — une lecture fractionnaire demanderait une seconde règle sur la place de la virgule, et cette règle devrait être énoncée pour chaque saisie au lieu d’être supposée. La saisie peut faire au plus cinquante-trois chiffres, ce qui vaut 9 007 199 254 740 991 en décimal ; au-delà, une machine ne peut plus la tenir exactement et la valeur est refusée plutôt qu’arrondie. Les zéros de tête sont acceptés et ignorés, donc 00001011 et 1011 en binaire sont le même nombre, et la somme imprimée est identique pour les deux. Un signe moins placé devant est accepté et reporté sur les deux sorties. La page convertit du binaire vers le décimal ; le sens inverse est une autre page, liée plus bas, et les lectures hexadécimales sont sur une troisième. Elle ne fait pas d’arithmétique et pas d’opérations bit à bit — il n’y a ici ni AND, ni OR, ni XOR, ni décalage.

Questions fréquentes

Comment convertir un binaire en décimal à la main ?
Écrivez les valeurs de position sous les chiffres, en partant de 1 à droite et en doublant à chaque pas vers la gauche — 1, 2, 4, 8, 16 et ainsi de suite. Gardez ensuite les valeurs placées sous un 1, jetez celles placées sous un 0, et additionnez ce qui reste. Pour 1011 en binaire, cela donne 8, 2 et 1, soit 11. Les deux erreurs possibles sont de lire les chiffres de gauche à droite au lieu de droite à gauche, et d’additionner une valeur de position qui porte un zéro — la somme imprimée sur cette page vous montre l’une et l’autre, puisqu’elle ne liste que les termes qui comptent.
Pourquoi la réponse ne contient-elle pas les valeurs de position qui portent un zéro ?
Parce qu’elles n’apportent rien, et que les écrire noierait ce qui compte. Zéro multiplié par n’importe quelle valeur de position donne zéro, donc un terme comme 0×4 peut disparaître sans changer le total. La somme est écrite 8 + 2 + 1 plutôt que 8 + 0 + 2 + 1 justement pour que le quatre manquant soit visible : voir quels rangs sont absents est la façon de vérifier que vous avez aligné les chiffres correctement au départ.
Un zéro de tête change-t-il le nombre ?
Non. Les zéros de tête occupent des rangs qui n’apportent rien, exactement comme en décimal où 007 vaut toujours sept. 00001011 et 1011 en binaire sont le même nombre et la page donne les deux mêmes sorties pour l’un comme pour l’autre. Compléter jusqu’à une largeur fixe est courant quand la largeur a un sens — un octet s’écrit le plus souvent avec ses huit chiffres — accepter la forme complétée est donc une nécessité, pas une commodité.
Quel est le plus grand nombre binaire que je peux convertir ici ?
Cinquante-trois chiffres, soit 9 007 199 254 740 991 en décimal. La limite n’est pas un choix de cette page : c’est la largeur à laquelle un nombre machine cesse de distinguer deux entiers voisins, donc une saisie plus longue ne pourrait pas être lue exactement et la page devrait imprimer quelque chose qui ressemble à une réponse sans en être une. Une saisie trop longue est refusée avec un message. Cela compte davantage ici que sur les pages d’arithmétique, parce que convertir a l’air d’une lecture et qu’une lecture a l’air d’être sans limite.
Est-ce la même chose que diviser par deux de façon répétée ?
Cela donne la même réponse par un autre chemin. La division répétée par deux produit les chiffres en partant de la droite, ce qui est la méthode à employer dans l’autre sens — du décimal vers le binaire. Dans le sens binaire vers décimal, la somme des valeurs de position est plus courte, parce que les chiffres sont déjà connus et qu’il ne reste qu’à additionner leurs poids. Les deux sont justes ; la somme est ce que cette page imprime, parce que c’est celle qu’on vérifie d’un coup d’œil.
Puis-je convertir un nombre binaire avec une partie fractionnaire ?
Pas ici. Cette page lit des nombres entiers, donc une virgule binaire est refusée plutôt que devinée. Les fractions en binaire sont parfaitement définies — les rangs à droite de la virgule valent un demi, un quart, un huitième, et ainsi de suite — mais une page qui les accepterait devrait décider combien en montrer et comment arrondir la dernière, et toute cette famille de pages travaille en nombres entiers. Garder cette frontière au même endroit sur chaque page du groupe évite qu’une même saisie soit acceptée quelque part et refusée ailleurs.

Références

Calculatrices liées