Représentation hexadécimale
Quand il s'agit de représenter des nombres sur un nombre important de bits (les processeurs modernes possèdent une architecture 64 bits), on opte pour la représentation hexadécimale, c'est-à-dire le système de numération en base 16. La raison en est que 16 est une puissance entière de 2, à savoir 24 .
On a choisi arbitrairement les lettres de l'alphabet latin, A à F pour représenter les valeurs décimales respectivement 10 à 15 avec les correspondances suivantes :
A = 10, B = 11, C = 12, D = 13, E = 14 et F = 15.
Regardons quelques exemples pour comprendre le principe de cette représentation. Soit le nombre codé sur 8 digits hexadécimaux
8FFA6BD0h
avec l’indice h pour mettre en évidence que nous sommes en représentation hexadécimale. Ici, c’est superflu parce qu’il y a des digits du nombre qui valent A, B, C, D, E ou F, auquel cas il n’y a pas d’ambiguïté avec le système décimal. On trouve aussi, selon les auteurs, la variante :
8FFA6BD016
Nous allons convertir ce nombre en décimal, en écrivant la somme explicite des puissances entières de 16 exprimées en décimal selon le tableau ci-dessous :
167 | 166 | 165 | 164 | 163 | 162 | 161 | 160 |
8 | F | F | A | 6 | B | D | 0 |
Ainsi, le nombre vaut :
8.167+15.166+15.165+10.164+6.163+11.162+13.161+0.160
soit 2 415 553 488 en décimal.
Avez-vous remarqué que pour calculer la somme pondérée, nous avons remplacé A par 10, B par 11, etc., et F par 15 puisque nous voulions l’équivalent décimal du mot hexadécimal ?
Conversion hexadécimal en binaire et réciproquement
L'intérêt de la représentation hexadécimale, on l’a déjà évoqué, réside dans les conversions binaire vers hexadécimal et hexadécimal vers binaire. Ces conversions sont très simples et tirent parti du fait que 16=24. Nous ne donnons aucune justification théorique. Nous nous contenterons d’exemples traités sur la base de la recette toute simple.
Nous commençons par la conversion hexa vers binaire. Soit le nombre hexadécimal 1BEFh. Chaque digit est converti par un mot binaire de 4 bits, indépendamment de sa position dans le mot :
1 devient 0001 en binaire, B qui vaut 11 en décimal devient 1011 en binaire, E qui vaut 14 en décimal devient 1110 en binaire et F qui vaut 15 en décimal devient 1111 en binaire.
Finalement, en groupant les bits par paquet de 4, ce que suggère la recette :
1BEF h = 0001 1011 1110 1111
La conversion binaire vers hexa est tout aussi simple. Elle consiste à grouper le nombre représenté en binaire par groupe de 4 bits à partir de la gauche (les bits de poids faibles). Nous matérialisons par des espaces les groupes de 4 bits pour la bonne lisibilité. Par exemple, soit à convertir :
1010111101001
Comme il y a 13 bits, on les groupe par la gauche en groupe de 4 et on complète à 0 les bits de poids forts du groupe à l’extrême gauche et on obtient :
0001 0101 1110 1001
Ensuite, chaque groupe de 4 bits est converti en hexadécimal indépendamment, comme s'il s'agissait d'un nombre compris entre 0 et 15 (en base 10). Concrètement, on manipule donc uniquement les 4 premières puissances de 2, soit 1, 2, 4 et 8.
Sur notre exemple, 0001 donne 1, 0101 donne 5, 1110 donne 14 en décimal donc E en hexa et finalement, 1001 donne 9 ; soit finalement,
0001 0101 1110 1001=15E9 h
Concrètement, la conversion de grands nombres de binaire en hexadécimal ou réciproquement se limite donc à des conversions de nombres de 0 à 15 en base 10, par le groupement en groupes de 4 digits (en commençant par la droite, c’est-à-dire les poids faibles). La magie de la simplification réside dans le fait que 16=24
Représentation octale
Comme la simplicité extrême des conversions est liée au fait que 16 est une puissance entière de 2, toute représentation pondérée à base de puissance entière de 2 conduirait aussi à cette propriété. Toutefois, 32 suppose 32 symboles pour représenter chaque digit, et surtout supposerait la mémorisation de tables d’addition et de multiplication rédhibitoires.
On n’a jamais proposé un système de numération de base 32, à la connaissance des auteurs. En revanche, il a existé le système octal, de base 8, même s’il est quelque peu tombé en désuétude. On comprendra aisément que dans le système octal, les conversions sont basées sur le groupement en paquets de 3 bits. Chaque digit octal est converti en mot de 3 bits, compris entre 0 et 7 en décimal.
On se contente de traiter un exemple pour chaque type de conversion :
111 000 011 101 = 70358
et 52418 = 101 010 100 001 en binaire.
Arithmétique hexadécimale
Il peut être utile de faire des opérations arithmétiques élémentaires en hexadécimal. Nous nous contentons ici de traiter un exemple d’addition. Le principe est le même qu'en base 10 avec le traitement colonne par colonne, un résultat partiel qui descend sous la barre d’addition et une retenue pour la valeur qui excède la base. En hexadécimal, évidemment, la retenue est basée sur une somme de colonne qui excède 16 et non pas 10.
| 4 | B | E | F |
| 2 | F | A | 8 |
somme | 7 | B | 9 | 7 |
En résumé
Nous sommes capables de coder comme un ordinateur les entiers naturels et relatifs, et nous sommes aussi capables de les représenter de façon équivalente sous forme de code hexadécimal. Il nous reste à voir comment coder les nombres décimaux. C'est l'objet du prochain chapitre.