Quand on dit qu'on compte en base 10, on exprime qu'on utilise les
chiffres de 0 à 9 pour former des nombres et que chaque position d'un
nombre correspond à un multiple de 10. Ainsi, écrire 254 est une manière
fort commode de représenter un nombre formé de la somme de 200, 50 et 4.
Autrement dit, les représentations suivantes sont toutes équivalentes :
254
= 200 + 50 + 4
= 2 x 100 + 5 x 10 + 4 x 1
= 2 x 102 + 5 x 101 + 4 x 100
Évidemment, ça marche aussi avec des puissances négatives. Par exemple, 3.14 = 3 x 100 + 1 x 10-1 + 4 x 10-2.
Évidemment aussi, rien n'empêche de compter dans une autre base que 10. Dans une base n (n > 1), un nombre s'écrira comme la somme des chiffres du nombre multipliés par la puissance de n correspondant à leur position dans le nombre.
En développement embarqué, on utilise énormément les bases 2 (appelée "binaire"), 16 (appelée "hexadécimal") et plus rarement 8 (appelée "octal"). En binaire, les chiffres utilisés sont 0 et 1, en octal de 0 à 7 et en hexadécimal, on utilise les chiffres de 0 à 9, puis les lettres de A à F pour représenter les valeurs de 10 à 15. Les chiffres binaires sont aussi appelés bits.
Le fait que 8 et 16 soient des puissances de 2 simplifie énormément les conversions entre ces bases : un chiffre hexadécimal correspond à 4 chiffres binaires (car 16 = 24) et un chiffre octal à 3 chiffres binaires (car 8 = 23). Avec un peu de pratique, vous saurez vite le tableau suivant par cœur :
Décimal | Binaire | Hexadécimal | Octal |
---|---|---|---|
0 | 0000 | 0 | 0 |
1 | 0001 | 1 | 1 |
2 | 0010 | 2 | 2 |
3 | 0011 | 3 | 3 |
4 | 0100 | 4 | 4 |
5 | 0101 | 5 | 5 |
6 | 0110 | 6 | 6 |
7 | 0111 | 7 | 7 |
8 | 1000 | 8 | 10 |
9 | 1001 | 9 | 11 |
10 | 1010 | A | 12 |
11 | 1011 | B | 13 |
12 | 1100 | C | 14 |
13 | 1101 | D | 15 |
14 | 1110 | E | 16 |
15 | 1111 | F | 17 |
Si vous voulez convertir le nombre hexadécimal 25FD en décimal, vous devrez calculer 2 x 163 + 5 x 162 + 15 x 161 + 13 x 160 = 9725.
Cependant, si vous voulez convertir le même nombre en binaire, il est beaucoup plus simple d'utiliser le tableau précédent en faisant des paquets de 4 bits : 2 devient 0010, 5 devient 0101, etc. Le résultat est donc 0010010111111101. Quand on essaie de lire un tel nombre, on comprend tout de suite l'intérêt de l'hexadécimal par rapport au binaire ! :)
Dans le tableau (colonne Binaire) comme dans ce dernier exemple, j'ai fait figurer les zéros non significatifs (normalement omis) précisément pour faciliter cette gymnastique mentale.
Pour passer du binaire à l'octal, on fera des paquets de 3 bits, obtenant donc 22775 pour ce même exemple. Avec un peu d'habitude, on peut passer de l'octal à l'hexadécimal ou vice-versa en passant mentalement par le binaire pour regrouper les chiffres.
Faites quelques exercices pour vous familiariser avec la technique, ça vous sera extrêmement utile. Vous pouvez par exemple convertir votre date de naissance en hexadécimal, puis en binaire, puis en octal, puis faire la même chose avec votre numéro de téléphone en prenant ses chiffres 2 par 2 puis 3 par 3, etc.