Notation hexadécimale
ATTENTION
Ce chapitre est en cours de rédaction. Il est donc découseillé de s'y attaquer.
TODO finir le chapitre.
Les données représentés en base 2 sont très difficiles à manipuler pour les humains.
Mais dans certains cas, il est intéressant d'avoir accès à cette représentation, ou une représentation proche, pour pouvoir travailler indépendamment sur chaque bit ou octet d'un nombre.
En général, plutôt que d'utiliser une représentation binaire, on utilise une représentation hexadécimale, c'est à dire en base 16.
Base 16
En base 16, on représente les nombres avec 16 symboles au lieu de 10 ou 2. Comme on a pas assez de chiffres, on rajoute des lettres.
Symbole base 16 | Valeur en base 10 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
a | 10 |
b | 11 |
c | 12 |
d | 13 |
e | 14 |
f | 15 |
A noter que les lettres peuvent être en majuscule ou non, celà ne change en général rien.
Donc, si on compte des arbres, et qu'on a par exemple F3A16 arbres, on a
- En position 0, A16 paquets de \(1\) arbre, soit \(10_{10}\) arbres.
- En position 1, 316 paquets de \(16_{10}\) arbres, soit \(48_{10}\) arbres.
- En position 2, F16 paquets de \(256_{10}\) arbres, soit \(3840_{10}\) arbres
Dans un nombre en base 16, la taille d'un paquet en position \(p\) est de \(16^{p}\).
Exercice : base 10 vers base 16
Combien vaut E16 en base 10 ?
Regardez le tableau des valeurs des symboles dans le cours...
E16 vaut 1410
Combien vaut 3516 en base 10 ?
Il faut appliquer la formule qu'on a vu pour les conversions binaires (base 2) vers décimal (base 10), mais avec la taille de paquet \(16^{p}\).
Combien vaut F2A16 en base 10 ?
Il faut appliquer la formule qu'on a vu pour les conversions binaires (base 2) vers décimal (base 10), mais avec la taille de paquet \(16^{p}\).
Conversions binaire - hexadecimal
Remarquons qu'il y a une forme d'harmonie entre les représentations binaires les représentations hexadécimales :
binaire | hexadécimal |
---|---|
00002 | 016 |
00012 | 116 |
00102 | 216 |
00112 | 316 |
01002 | 416 |
01012 | 516 |
01102 | 616 |
01112 | 716 |
10002 | 816 |
10012 | 916 |
10102 | a16 |
10112 | b16 |
11002 | c16 |
11012 | d16 |
11102 | e16 |
11112 | f16 |
Il faut exactement 4 bits pour représenter toutes les valeurs d'un chiffre de la base 16, et vice versa !
La conversion binaire vers hexadécimale est alors très facile : il suffit de couper le nombre en paquets de 4 en partant de la droite, et de traiter chaque paquet indépendamment:
110110012 = 1101 10012 = d916
10000101102 = 10 0001 01102 = 21616
Le sens inverse est aussi trivial : un chiffre hexadécimal donnera un groupe de 4 bits dans le nombre binaire :
f2d16 = 1111 0010 11012
3516 = 0011 01012 = 1101012
Conversion decimal vers hexadecimal
Pour convertir un nombre décimal vers sa représentation hexadécimale, on trouve d'abord sa représentation binaire, puis on convertis du binaire vers la représentation hexadécimale.
12010 = 11110002
111 10002 = 7816
Exercice : base 10 vers base 16
Convertissez 17110 en base 16.
Vous pouvez utiliser les conversions en base 2 faites dans le chapitre entiers naturels en base 2
17110 = 101010112 = AB16
Exemple d'utilisation de la représentation hexadécimale
Il est courant de représenter les couleurs au format RVBA sur un entier de 32 bits. L'entier est alors partagé en 4 paquets de 8 bits.
Chaque paquet représente la valeur lumineuse d'une couleur (un canal), de 0 à 255.
- Les bits 31 à 24 codent le rouge.
- Les bits 16 à 23 codent le vert.
- Les bits 8 à 15 codent le bleu.
- Les bits 0 à 7 codent le canal alpha (la transparence). 0 veut dire transparent, 255 opaque.
Canal | Rouge | Vert | Bleu | Alpha |
---|---|---|---|---|
positions des bits | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
représentation binaire | rrrr rrrr | vvvv vvvv | bbbb bbbb | aaaa aaaa |
représentation hexadécimale | RR | VV | BB | AA |
Par exemple, la couleur du bandeau du site, le material deep purple, est représenté par 7E56C2FF16
Dans ce cas, la représentation hexadécimale est particulièrement adaptée, parce qu'elle permet de voir indépendament chaque canal de couleur, tout en gardant la valeur de la couleur très concise.
Canal | Rouge | Vert | Bleu | Alpha |
---|---|---|---|---|
positions des bits | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
représentation binaire | 0111 1110 | 0101 0110 | 1100 0010 | 1111 1111 |
représentation hexadécimale | 7E | 56 | C2 | FF |
Par exemple, si on veut enlever du rouge et ajouter du vert, on peut transformer 7E56C2FF16 en 6080C2FF16, ce qui donne un bleu pâle.
Dans une représentation décimale, on perds cet avantage :
7E56C2FF16 = 211961523110
6080C2FF16 = 161905126310