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
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.
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.
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 : |
| 0 | 0 | logique ! |
| 1 | 1 | simple ! |
| 2 | 10 | Le 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. |
| 3 | 11 | On re-remplit le rang 1. |
| 4 | 100 | Le 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). |
| 5 | 101 | On procède de même. |
| 6 | 110 | |
| 7 | 111 | |
| 8 | 1000 | On entame le quatrième rang. |
| 9 | 1001 | On recommence au premier… |
| 10 | 1010 | On rempli les rangs. |
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.
Pour le moment, on n'a compté jusqu'à dix. Mais on ne sait pas encore convertir. Sans plus attendre donc, voici la conversion !
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.
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.
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 ?
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.
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!
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”).
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.
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.
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.
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 :
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 :-).
Bon… Je pense avoir tout dit… Voici juste une petite blague entre les bases :
-- 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.
Juste un petit code de programmation qui convertit le décimal en binaire.
Date de dernière mise à jour : 07-04-2010