LE COMPTAGE INFORMATIQUE

La magie du binaire, de l'octal et de l'hexadécimal.


Par David K. Every, traduit de l'anglais par Charles Gigučre.
(C) 1998 - Tous droits réservés par l'auteur
Les ordinateurs utilisent des systèmes numériques mystiques, tels que l'hexadécimal, l'octal et le binaire. Les gens les craignent, mais ils sont relativement simples. Si vous comprenez cet article, vous devriez posséder une bonne compréhension de ce qu'ils sont et comment ils fonctionnent.

 

Décimal (base 10)

Le décimal est le système numérique qui est enseigné dans nos écoles. Il désigne la base 10 -- c'est à dire 10 symboles uniques (0 à 9), que nous utilisons et réutilisons pour représenter les nombres. Lorsque nous réutilisons un symbole (chiffre), il nous faut le faire sur une autre colonne pour représenter le nombre désiré (tout comme l'odomètre d'une voiture) -- ou en d'autres mots, nous avons besoin de deux chiffres (une colonne des dizaines et une colonne des unités) pour représenter notre nombre. La valeur située dans la colonne des dizaines signifie que ce chiffre doit être multiplié par 10, et la valeur de la colonne des unités est multipliée par 1. Lorsqu'il faut aller au-delà de la colonne des dizaines (un nombre supérieur à 99), il faut recommencer sur une nouvelle colonne -- la colonne des centaines. Ainsi un nombre tel que 123, signifie 1 fois cent, plus 2 fois 10, plus 3 (3 fois 1).

Nous donnons aux colonnes des noms pour notre commodité.

En décimal, chaque chiffre significatif ajouté est 10 fois plus grand que le chiffre précédent.

À la puissance -- Ainsi chaque colonne équivaut à 10 «à la puissance» de la position de cette colonne. («À la puissance» signifie multiplié par lui-même un certain nombre de fois ou exposant). Ainsi la colonne des dizaines équivaut à 10 x le chiffre. La colonne des centaines équivaut à 10 x 10 x le chiffre (ou 100 fois le chiffre). La colonne des milliers équivaut à 10 x 10 x 10 x le chiffre et ainsi de suite.

Une représentation plus courte de cette notation est 10^n, où «n» représente le nombre de fois que 10 doit être multiplié par lui-même. Ce sont là des manières différentes de représenter la même chose. La colonne suivant les millions est celle des dizaines de millions (ou 10^7), ou 10 x 10 x 10...sept fois, multiplié par la valeur de la colonne (chiffre). La colonne suivante est celle des centaines de millions (10^8) et ainsi de suite.

 

Les autres bases

Notre système numérique décimal n'est qu'un regroupement arbitraire en base 10, et nous aurions pu facilement choisir une autre base. La raison pour laquelle nous (les occidentaux et la plupart de l'humanité) avons choisi la base 10 semble avoir été motivée par le nombre de doigts que nous possédons. Il existe un tas d'autres systèmes numériques -- plusieurs utilisés par les ordinateurs ou dans d'autres cultures (quoique la base 10 soit devenue universelle).

Alors parlons de ce que nous connaissons et appliquons-le à d'autres systèmes (comme ceux utilisés dans les ordinateurs).

 

Binaire (base 2)

Le binaire est en base 2. Il n'y a que 2 symboles distincts pour représenter les nombres (0 et 1). Si vous voulez représenter un nombre plus grand que 1, vous devez utiliser une autre colonne. Voici une table de conversion de la base 2 à la base 10.

 

Table de conversion binaire à décimal

0000 = 0

0100 = 4

1000 = 8

1100 = 12

0001 = 1

0101 = 5

1001 = 9

1101 = 13

0010 = 2

0110 = 6

1010 = 10

1110 = 14

0011 = 3

0111 = 7

1011 = 11

1111 = 15

Chaque fois que nous remplissons une colonne (avec un 1) et que nous n'avons plus de symbole à notre disposition (dans ce cas un 1), nous devons le réutiliser (le transporter) sur la colonne suivante et effacer la colonne juste en dessous.

Vous rappelez-vous ce que les colonnes signifient en décimal ? Et bien elles signifient quelque chose en binaire. Chaque colonne représente également une valeur en binaire -- ce ne sont que des valeurs différentes.

Pour convertir un nombre binaire, nous n'avons qu'à multiplier une colonne par 2 à la puissance de sa position. Puis nous additionnons toutes les valeurs. Dans l'exemple précédent (1101 0110), pour la conversion en décimal nous obtiendrions 128+64+16+4+2 (tous les 1 multipliés par leur position) ou la valeur décimale 214.

Si on se rend jusqu'à la neuvième colonne, le bit (chiffre) représenterait 2^8 ou colonne 256. La colonne suivante serait 512 et ainsi de suite. (Ne faites que multiplier la valeur par 2).

 

Octal (base 8)

Le binaire prend beaucoup d'espace, il utilise 5 colonnes pour représenter un nombre tel que 19 (en décimal) -- le décimal est une notation qui prend beaucoup moins d'espace (elle ne prend que deux colonnes). Imaginez un nombre décimal très gros, tel que 14,256,324 en binaire. Ça serait une longue suite de 1 et de 0 difficile à lire, et si un seul bit est mal placé, votre nombre est incorrect.

En décimal, nous groupons les nombres pour faciliter l'alignement des colonnes. Les américains utilisent une virgule pour séparer ces groupes (d'autres pays utilisent un «.» ou une espace). On utilise ce caractère à chaque trois colonnes (pour clarifier la lecture). Les gens ont voulu appliquer les même règles pour les nombres binaires -- les programmeurs regroupent les bits par 3. Alors ils représentent un nombre tel que 18 ainsi - 010 010 (en binaire). Ou un nombre tel que 187 ainsi - 010 111 011 (en binaire). C'est notation est plus simple lorsqu'on a à lire un dégât de 1 et de 0. Mais pourquoi ne pas simplement changer de base?

Avec 3 bits on peut représenter une valeur comprise entre 0 et 7. C'est ce qu'on appelle la base 8 (octal). Voici une table de conversion:

Table de conversion binaire à octal

000 000 = 0

000 100 = 4

001 000 = 10

000 001 = 1

000 101 = 5

001 001 = 11

000 010 = 2

000 110 = 6

001 010 = 12

000 011 = 3

000 111 = 7

001 011 = 13

Notez que nous commençons à réutiliser les symboles lorsque nous dépassons un groupement de 3 bits (111), il faut ainsi une autre colonne pour représenter le nombre (tant en binaire qu'en octal). Le binaire et l'octal vont bien ensemble -- vous ne faites que des groupes binaires de 3 chiffres (appelés bits) pour convertir en octal. Pour faire l'inverse, vous n'avez qu'à étirer un nombre octal sur trois colonnes binaires. Les ordinateurs utilisent encore de nos jours la forme binaire, mais cette forme peut être représentée de manière à utiliser encore beaucoup moins d'espace.

Vous rappelez-vous ce que les colonnes signifient en décimal et en binaire ? Et bien elle signifie quelque chose en octal également.

Chaque colonne vaut 8 fois plus que la colonne précédente (base 8). Pour convertir l'octal en décimal, vous multipliez la colonne par 8 à la puissance de sa position. Puis nous additionnons toutes les valeurs. Dans l'exemple précédent (1234), la conversion en décimal donnerait (1 x 512) + (2 x 64) + (3 x 8) + (4 x 1), ou la valeur décimale 668. Si on dépasse la cinquième colonne, la valeur (chiffre) vaudrait 8^5 (8 x 8 x 8 x 8 x 8) ou 4,096 en décimal. La colonne suivante vaudrait 8 fois plus (32,768) et ainsi de suite. (Ne faites que multiplier la valeur par 8).

 

Hexadécimal (base 16)

Tenez bon, la leçon tire à sa fin.

Les ordinateurs pensent en bits (binaire), cependant ils regroupent les bits en gros paquets, tels que 4, 8 (appelé octet), 16 ou 32 bits. Les ordinateurs utilisent véritablement ces regroupements (avec leurs bits, tous en même temps), cela leur permet de travailler avec des nombres plus grands qui sont mieux adaptés à la résolution de problèmes. La taille de ces regroupements indique la «taille» de l'ordinateur, voilà pourquoi on parle d'ordinateurs 32 bits -- ils utilisent 32 bits à la fois. (Notez que les regroupements sont toujours des puissances de 2).

L'hexadécimal possède 16 valeurs uniques (2^4 ou 2 x 2 x 2 x 2) pour chacune des colonnes (et non pas 2 comme le binaire, 8 pour l'octal et 10 pour le décimal). Cependant nous n'avons que 10 symboles uniques (0,1,2,3,4,5,6,7,8,9) pour représenter les chiffres. Alors où prendre les 6 symboles manquants ? On les emprunte à notre alphabet. Lorsque tous les symboles de chiffres sont épuisés, on utilise les lettres de l'alphabet en tant que nombre, ce qui donne cette suite : 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F -- puis on recommence avec 0.

Table de conversion binaire à hexadécimal

0000 = 0

0100 = 4

1000 = 8

1100 = C

0001 = 1

0101 = 5

1001 = 9

1101 = D

0010 = 2

0110 = 6

1010 = A

1110 = E

0011 = 3

0111 = 7

1011 = B

1111 = F

Ce n'est pas très compliqué, tout s'aligne parfaitement (en paquets de 4 bits), c'est beaucoup mieux que l'octal. C'est encore plus économique en terme d'espace que le décimal. Un gros nombre décimal tel que 32,767 donne un joli regroupement de symboles hexadécimaux [7FFF] -- et c'est encore plus facile à lire qu'une suite de 1 et de 0. À cause de son alignement et de son économie d'espace, l'hexadécimal a supplanté les représentations octales (il y a de cela 20 ans). Aujourd'hui il est rare de voir des nombres représentés en octal.

Les ordinateurs utilisent toujours le binaire (ou des regroupements binaires) alors que les humains représentent la plupart de ces nombres en hexadécimal.

Vous rappelez-vous ce que signifie les colonnes en décimal, binaire ou octal ? Et bien elles signifient quelque chose également en hexadécimal.

Ainsi chaque colonne représente une valeur 16 fois plus grande que la colonne précédente (base 16). Si on atteint la 5e colonne, la valeur (chiffre) vaut 16^4 ou 65,536 (en décimal). La colonne suivante vaut 16 fois plus (1,048,576) et ainsi de suite. (Ne faites que multiplier la valeur par 16).

Pour convertir de l'hexadécimal en décimal on n'a qu'à multiplier la colonne par 16 (à la puissance de la position de la colonne) puis additionner les valeurs. Ainsi l'exemple précédent (F3D9), converti en décimal, donnerait (15 x 4096) + (3 x 256) + (13 x 16) + (9 x 1) ou la valeur décimale 62,425. Notez qu'au-delà du chiffre 9, les lettres représentent des valeurs : A=10, B=11, C=12, D=13, E=14 et F=15.

 

Conclusion

J'espère que cette leçon de mathématique n'a pas été trop ennuyeuse et qu'elle vous a éclairée sur les systèmes numériques des ordinateurs. De nos jours, ce sont habituellement les programmeurs de bas niveau (les gens qui écrivent les pilotes de périphériques (driver), les systèmes d'exploitation, etc.) qui doivent se soucier de l'hexadécimal ou du binaire -- l'octal faisant figure de dinosaure. Cependant c'est une bonne référence pour tous les programmeurs et c'est bon aussi que les utilisateurs en sachent quelque chose.

Il n'y a rien de compliqué dans ces systèmes numériques, c'est seulement plus long à convertir (pour les humains). Cela vous donne une bonne base pour comprendre comment ce calcul la mémoire, les unités de stockage et tout ce qui est relié aux ordinateurs (retenez seulement que les ordinateurs aiment les puissances de 2). C'est également une leçon de mathématique amusante qui nous rappelle que notre système numérique (base 10) est arbitraire et qu'il existe d'autres manières de compter les nombres.