Aller au contenu

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}\).

\[ \begin{align} 35_{16} &= 5 \times 16 ^ {0} + 3 \times 16 ^ {1}\\ &= 5 + 48\\ &= 53_{10} \end{align} \]

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}\).

\[ \begin{align} F2A_{16} &= 10 \times 16 ^ {0} + 2 \times 16 ^ {1} + 15 \times 16^{2}\\ &= 10 + 32 + 3840\\ &= 3882_{10} \end{align} \]

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