Binaire et hexadécimal


Ici, je vous apprendrez ce qu'il faut savoir à propos du mode de comptage binaire et de la conversion entre ces deux bases. On verra aussi la base 16 qui est l'hexadécimal.

Sommaire

  1. Comment comptons nous en décimal?
  2. Le binaire
    1. Présentation
    2. Du décimal en binaire
    3. Du binaire en décimal
  3. L'hexadécimal
    1. Présentation
    2. Du décimal en hexadécimal
    3. De l'hexadécimal en décimal
    4. Du binaire en hexadécimal
    5. De l'hexadécimal en binaire
  4. Conclusion

Comment comptons nous en décimal ?

Ce chapitre peut paraître un peu idiot, mais pour bien comprendre comment on compte dans les autres bases, il est indispensable que vous compreniez ce qui suit.

En effet, tout le monde (ou presque) de nos jours sait compter en base 10. Par exemple, il est très facile de compter jusqu'à 20. C'est même devenu automatique, c'est à dire que l'on n'a plus besoin de réfléchir pour compter. C'est pratique dans la vie courante, mais on oubli comment cela marche vraiment. Ce petit rappel permettra de mieux comprendre.

Dans la vie, nous comptons en base 10 (en décimal). Certains diront que cette pratique est venue du fait que nous avons 10 doigts. Cette définition de la base 10 donne lieu à deux conséquences :

Vous me suivez ?

J'ai parlé de rangs des centaines, de dizaines et d'unités. On voit que une centaine vaut 10 dizaines et que une dizaines vaut 10 unités. Plus mathématiquement, un rang est égale au précédent multiplié 10 (car 10 est la base).
On peut dire que chaque rang est à une puissance de 10 supérieur au précédent.

De cette manière, le nombre 56 = 50 + 6 = 5×101 + 6×100.

Ce que je viens de faire là pour le nombre 56, c'est décomposer un nombre en puissances de 10 (unités, dizaines, centaines…).


On peut décomposer chaque nombre en puissances de 10 successives. Par exemple, 3506 = 3×1000 + 5×100 + 0×10 + 6×1 : on peut aussi l'écrire 3×103 + 5×102 + 6×100 si l'on utilise les notations de puissance.

Lors de la décomposition : les coefficients devant les puissances ne doivent pas dépasser le plus grand nombre de la base !
Par exemple, on ne peut pas écrire : 1236 = 12×102 + 3×101 + 6×100

car le “12” est plus grand que “9”. C'est juste mathématiquement, mais cela risque de nous induire en erreur par la suite.
On devra remplacer 12×102 par 1×103 + 2×102.

Avec cette explication, vous devez avoir compris qu'en base 10 :
  • On change de rang dés que la précédente est à 9.
  • On peut décomposer tous les nombres en puissance de 10.

Sommaire

Le binaire

1. Présentation

Le binaire est le mode de comptage non plus en base 10 mais en base 2. Il est utilisé par exemple en informatique, car les machines ne peuvent comparer que des éléments pouvant prendre deux valeurs : des “oui” ou des “non”. On parle aussi de 1 et de 0.

Je vous avais parlé des rangs (unités, dizaines, centaines…), et bien sachez qu'en binaire on emploie le mot “bit”. Par exemple, le nombre en base 2 « 10011 » s'étale sur 5 bit.

Voilà pour les précisions ! Passons aux choses sérieuses.

En binaire, vous le savez (sinon vous ne liriez pas ces lignes) on ne compte plus avec 10 caractères, mais seulement avec 2 : qui sont 0 et 1.


Si je me place dans le système binaire, 10101 est un nombre (dont l'équivalent en décimal est 21) et qui se lit “un zéro un zéro un” (et non pas dix mille cent un !!)
Par contre, il est dénué de sens de dire que le nombre 120 est en binaire. C'est comme dire que 12,3 est un nombre entier, c'est idiot.

Là où cela ce complique, c'est qu'on n'a plus que deux valeurs par rang (on en avait dix en décimal). Donc, dés que le rang atteint sa deuxième (la plus haute donc) valeur on change de rang. Par conséquent, en binaire, un rang commence à 0 et se termine à 1.

Ainsi, si vous avez bien compris, vous pouvez en déduire que chaque rang représente une puissance de 2, tout comme chaque rang en base 10 est une puissance de 10.

Il est important d'avoir compris ce que je viens de dire. J'ai essayé de faire des analogies avec le système décimal pour que ça soit plus compréhensible.


Bon, pour commencer et tenter d'y voir un peu plus clair, on va compter en binaire jusqu'à 10 (dix, hein, pas "un, zéro") :

valeur en décimal :équivalent en binaire :explications :
00logique !
11simple !
210Le premier rang a atteint le maximum autorisé ! Qu'à cela ne tienne, on passe au rang suivant. On met le second à 1 et on remet le premier à 0.
311On re-remplit le rang 1.
4100Le rang 1 est plein, mais le 2 aussi ! On passe donc au troisième et on remet les précédents à 0 (comme on le fait lorsque l'on passe de 0999 à 1000, par exemple).
5101On procède de même.
6110
7111
81000On entame le quatrième rang.
91001On recommence au premier…
101010On rempli les rangs.


Il suffit d'appliquer une règle : entamer le rang suivant quand celui en cours est plein!

Bon, pour compter jusqu'à 10 ou même 20, cela va encore de remplir ce tableau, mais si je vous demande de convertir 450 en binaire ? Vous n'allez pas monter un par un, si ?
Dans ce qui suit, on va voir une technique générale.

Sommaire

2. Conversion du décimal en binaire

Pour le moment, on n'a compté jusqu'à dix. Mais on ne sait pas encore convertir. Sans plus attendre donc, voici la conversion !

Méthode 1 : les puissances de 2

Pour y arriver, on doit décomposer notre nombre en puissances de 2. C'est le même principe que la décomposition en puissances de dix, sauf que l'on ne décompose pas en milliers, centaines et dizaines, mais en puissances de deux : 1, 2, 4, 8, 16, 32, 64 …, 512, 1024, etc (une valeur est égale à la précédente multipliée par 2).

Ainsi, si l'on prend l'exemple du nombre 26, on obtient en décomposition suivante :


26= 16 + 8 + 2
26= 1×16 + 1×8 + 1×2
26= 1×24 + 1×23 + 1×21                 (on écrit les coef sous forme de puissances de 2)
26= 1×24 + 1×23 + 0×22 + 1×21 + 0×20   (on ajoute les puissances de 2 qui manquent)
26= 1×24 + 1×23 + 0×22 + 1×21 + 0×20   (voyez les puissances de 2 qui sont toutes là)
26= 1×24 + 1×23 + 0×22 + 1×21 + 0×20   (en orange : notre nombre en binaire !)

Il est important de ne pas oublier les puissances dont les coefficients sont zéro.

Finalement, pour obtenir le nombre 26 en binaire, il suffit de mettre les coefficients qui sont devant les puissances de 2 à la suite. On obtient : 11010.

On écrit : (26)dec = (11 010)bin
Pour décomposer t'as pris 16 comme plus grande puissance de 2. Pourquoi ?

La plus grande puissance à mettre dans la décomposition, est celle dont la valeur est directement inférieur à notre nombre.
Un exemple : mon nombre est 13. Je sait que les puissances de 2 sont 1, 2, 4, 8, 16, etc. Je vois que 16 est trop grand, mais 8 est directement inférieur à 13. (bien sûr, 4 aussi est inférieur mais on prend celui qui est directement inférieur.)
Ensuite, on fait 13 - 8. Ça fait 5.
On applique le même raisonnement sur le 5 (le reste de la soustraction), et ainsi de suite jusqu'à atteindre 0.

Je récapitule la méthode :
  1. On a notre nombre en décimal.
  2. On le décompose en valeurs de puissances de 2
  3. Si certaines puissances manquent, on les rajoutent en mettant 0 devant.
  4. On lit les coefficients devant les puissances de 2, ce sera notre nombre en binaire !
  5. Par commodité, d'écriture, on regroupe les chiffres par 4.
    (par ex : 101010101 se notera 1  0101  0101). On verra pourquoi plus loin.

Méthode 2 : les divisions euclidiennes par 2

Tout aussi simple à comprendre. Cette méthode est mieux pour des grands nombres et est plus facile à utiliser en programation. Voilà comment on fait :

Comme rien ne vaut un exemple :

On voit apparaitre notre nombre binaire en rouge : il faut le lire de bas en haut.
Joli non ?

Sommaire

3. Conversion du binaire en décimal

Dans l'autre sens maintenant : convertir un nombre en base 2 en un nombre en base 10 ! je vous rassure tout de suite, c'est plus simple!

Prenons le nombre (au hasard) : 101 0110. On voit qu'il s'étale sur 7 rangs, et sait que chaque rang correspond à une puissance de 2 : le premier (en partant de la droite) est le rang 0, le second est le rang 1, etc.

Pour le convertir en décimal, on procède de la manière suivante : on multiplie par 20 la valeur du rang 0, par 21 la valeur du rang 1, par 22 la valeur du rang 2, […], par 210 la valeur du rang 10, etc.

Pour notre nombre 101 0110, on a donc 0×20 + 1×21 + 1×22 + 0×23 + 1×24 + 0×25 + 1×26.
Ensuite, il suffit simplement de remplacer les puissances de 2 par leurs valeurs et de faire la somme : 0×1 + 1×2 + 1×4 + 0×8 + 1×16 + 0×32 + 1×64 = 86.

donc : (101 0110)bin. = (86)dec.

Sommaire

l'Hexadécimal

1. Présentation

Après le binaire, voici venu une autre base : le système hexadécimal qui travaille en base 16.

Si vous avez suivi jusqu'ici, vous devinerez qu'il faudra 16 caractères différents pour représenter chacune des 16 valeurs.

C'est alors qu'avec une originalité déroutante, en hexadécimal, les caractères sont 0, 1, 2 etc. jusqu'à 9 ainsi que A, B, C, D, E et F.

Vous l'aurez compris : A en hexadécimal vaut 10 en décimal, B vaut 11, … et F vaut 15.

En hexadécimal, le changement de rang se fait donc à F. Ainsi E+1 = F et F+1 = 10 (dire “un-zéro”).

Plus compliqué : F+B = 1A.

Ça va? Alors passons à la conversion!

Sommaire

2. Conversion du décimal en hexadécimal

La conversion d'un nombre de la base 10 en base 16 est aussi “facile” qu'avec le binaire. Pour le binaire il fallait décomposer en puissances de 2, ici on décompose en puissances de 16. Qui sont…? Bon? OK, je vous les donne :

Pour l'exemple, je prendrais le nombre 1680. Il faut donc commencer par le décomposer en puissances de 16 :
1680 = 6×256 + 9×16 + 0×1
1680 = 6×162 + 9×161 + 0×160.

La conversion en hexadécimal de 1680 est donc 690 (lire “six-neuf-zéro”).

(PS : 1680 serait l'année de départ d'Amsterdam de Hendrick Van Der Decken, l'intrépide Capitaine du Hollandais Volant)

Un autre exemple : convertissons 2009 en hexadécimal : 2009 = 7×162 + 13×161 + 9×160. Le nombre en base 16 correspondant à 2009 est donc 7D9 (rappelez vous, chaque rang peut monter jusqu'à 15 en base 16, et le D vaut 13).

C'est le même principe qu'avec le binaire, le changement de base se fait juste à 16 au lieu de 2.

Sommaire

3. Conversion de l'hexadécimal en décimal

Dans ce sens, c'est plus simple : prenons un nombre : 4F2C. Il a 4 rangs : chaque rang est une puissance de 16 : pour convertir, on multiplie le premier rang (en partant de la droite) par 160, le second par 161, etc.
Ainsi on obtient :
4F2C = 4×163 + F×162 + 2×161 + C×160
4F2C = 4×163 + 15×162 + 2×161 + 13×160
4F2C = 4×4096 + 15×256 + 2×16 + 13×1
4F2C hex = 20 268 dec.

C'est simple non ? Il suffit de prendre les puissances de 16 croissantes.

Sommaire

4. Conversion du binaire en hexadécimal

Vous devez sans doute penser que le gros morceau est encore à venir ? En fait, il est déjà passé !

La conversion entre l'hexadécimal et le binaire est super facile si vous savez manipuler ces bases entre les nombres 0 et 15 (décimal hein ;-).

Prenons un nombre en binaire : 10100111011. Par commodité d'écriture, on l'écrit : 101  0011  1011.

Pourquoi ?

Tout simplement pour nous simplifier la vie : en effet, on sait que 4 rangs binaires permettent de monter jusqu'à 15. Et bien, par le plus grand des hasards, un rang en hexadécimal aussi ! (Cela vient du fait que 24 (4 rangs en base 2) = 161 (un rang en base 16)).

De cette façon, 4 bits en binaire seront convertis en un rang en hexadécimal !

Ainsi, le premier quadruplet : 1011 deviendra un seul rang en hexadécimal.

Or, 1011 donne 11 en décimal et on sait que 11 en décimal c'est “B” en hexadécimal. Le second quadruplet 0011 devient 3 en hexadécimal ; et finalement le dernier : 101 (ou 0101) devient : 5.

Ainsi, (101 0011 1011)bin = (53B)hex.

Sommaire

5. Conversion de l'hexadécimal en binaire

On va utiliser le même principe que ci-dessus, à savoir qu'un rang en base 16 correspond à 4 rangs en base 2.

On convertira le nombre hexadécimal BE57. On prend chaque rang que l'on convertit individuellement en binaire :

Prenez bien soin de mettre 0101 au lieu de 101, car il ne faut pas se tromper quand on va mettre les quadruplets bout à bout :
BE57 <=> 1011 1110 0101 0111 = 1011111001010111. (Et non pas 1011 1110 101 111 = 10111110101111)

Sommaire

Conclusion

Voilà : vous savez (normalement) convertir des nombres entiers entre les bases 2, 10 et 16. Je vous fais grâce de la base 8 (octal) : c'est exactement le même principe, c'est juste que les valeurs ne vont que jusqu'à 7. (Ne pas oublier le zéro, on a bien 8 valeurs en octal :-).

petites notes

Bon… Je pense avoir tout dit… Voici juste une petite blague entre les bases :

À quel moment cette égalité sera vérifiée : 31oct = 25déc ?

-- Réponse --Toujours. Rien à voir avec Halloween et Noël.
31 en base 8 (octale) sera toujours égal à 25 en décimal.

N'hésitez pas à m'envoyer un mail si ce tuto n'est pas clair ou simplement si vous avez des questions ou des remarques.

Convertisseur automatique

Juste un petit code de programmation qui convertit le décimal en binaire.

en C
#include <stdio.h>
#include <stdlib.h>
#define MAX 30

int main() {
    int nombre, i = 0, bin[MAX] = {0}, j;
    printf("\n Nombre à convertir en binaire : "); scanf("%d", &nombre);

// convertiseur
    while (nombre != 0) {
        bin[i] = nombre % 2;
        nombre /= 2;
        i++;
    }
    printf("\n");

// inverse le sens du tableau, pour avoir l'écriture en binaire dans le bon sens
    for (j=i; j>0; j--) {
        printf("%d", bin[j-1]);

// séparre les chiffres en bloc de 4
        if ((j) % 4 == 1) {
            printf(" ");
        }
    }
    printf("\n");

return 0;
}

en Python
# -*- coding:Utf-8 -*-

a = int(input("nombre à convertir : "))
bin = []

# convertisseur
while (a != 0):
    bin = bin + [a % 2]
    a /= 2

# on inverse la liste
bin.reverse()
for i in bin:
    print i,

Et mon convertisseur Décimal => Binaire en PHP.

Date de dernière mise à jour : 07-04-2010