Licence CC BY-NC-ND

Binaire et hexadécimal : partez sur de bonnes bases !

Dans la plupart des domaines de l’informatique, il est indispensable de connaitre le binaire. Le réseau ne fait pas exception ! Nous allons d’abord voir de quoi il s’agit et pourquoi cela sert en réseau. Nous en profiterons pour ensuite aborder l’hexadécimal, puis nous conclurons avec un point sur le stockage des nombres par les ordinateurs.

Décimal vs binaire : un peu de pratique

Comme nous sommes dans un cours de réseau, nous allons d’abord nous familiariser avec la conversion d’une adresse IP de sa notation binaire à sa notation décimale et vice versa. ;)

Ça a une utilité ou c’est juste pour faire fonctionner nos neurones ?

Eh bien, ça va nous préparer à faire des calculs intéressants, comme la personnalisation des masques de sous-réseaux ou la détection d’erreurs de transmission.

Système décimal

Le système de numération décimale est le plus connu aujourd’hui. Oui, il s’agit bien de la fameuse suite des chiffres : 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9. Ce système utilise la base 10.

Bon, ne trouvant vraiment pas quoi dire de plus sur cette technique de numération, nous allons nous contenter de citer Wikipédia pour les avantages et inconvénients de ce système (uniquement utile pour la culture hein, ce n’est pas à apprendre par cœur ;) ) :

La base dix comporte quelques atouts :

  • Le compte sur les dix doigts est très intuitif

  • Elle est construite sur un nombre pair, et la division par deux est la plus courante

  • Son ordre de grandeur est satisfaisant, car il permet de réduire considérablement la longueur d’un grand nombre par rapport à une base deux, tout en conservant des tableaux d’additions et de multiplications mémorisables

  • Les normes internationales sont construites sur cette base

  • Elle est la plus courante

    Cependant, la base dix n’est pas celle qui offre le meilleur bénéfice, car elle ne s’appuie pas sur un nombre ayant des propriétés avantageuses :

  • Un nombre comportant beaucoup de diviseurs (ex. : 12 ou 60) aurait eu un aspect pratique, or 10 n’en a que deux (2 et 5), et la division par cinq n’est pas la plus courante

  • Un nombre premier serait intéressant pour les mathématiques, car, dans une telle base, les nombres à virgule s’écriraient aisément sous forme de fraction irréductible, or dix n’est pas premier

  • Une puissance de deux serait adaptée à l’informatique, or dix n’est pas puissance de deux

Wikipédia
Système binaire

Le système binaire est un système de numération, tout comme l’est le système décimal, sauf que le système binaire utilise une base de 2. Il n’y a que deux chiffres : 0 et 1. Ces chiffres qui composent les nombres binaires sont appelés bits (combinaison des deux mots anglais BInary et digiT). Si vous vous rappelez bien, quand on a huit bits, on a un octet. ;)

Le système binaire est le système de base des calculs informatiques : votre processeur travaille sur une suite de 0 et 1, par exemple pour faire des vérifications. Si telle partie a du courant, le bit vaudra 1, sinon le bit vaudra 0.

Donc, les adresses IP et les masques de sous-réseaux que vous avez pu voir dans ce cours ne sont qu’une suite de 0 et 1. Et nous allons dans ce chapitre apprendre à faire la conversion d’une adresse IP écrite en binaire à une adresse IP écrite en décimal et vice versa.

Le système binaire est assez complexe quand il s’agit de représenter des chiffres négatifs, mais c’est important quand on veut faire de la programmation de bas niveau avec un langage comme l’assembleur, vous pouvez donc lire cet article. Prenez bien en compte que la lecture n’est pas obligatoire, ce que nous allons vous dire dans cette sous-partie suffira pour continuer la lecture de ce tutoriel.

C’est parti, touchons du binaire

Bon, avant tout, nous allons faire un petit rappel. Une adresse IP est une suite de 4 groupes de chiffres séparés par un point. Chaque « groupe » vaut 1 octet, soit 8 bits. Ce qui nous intéresse ici est le bit.

D’après les explications ci-dessus, un bit est un nombre qui ne peut prendre que 2 valeurs possibles : 0 ou 1. Comme nous avons 8 bits, nous allons donc représenter une adresse IP par 32 chiffres qui ne seront que des 0 et 1. En effet, chaque portion de l’adresse IP valant 8 bits, nous aurons 8 chiffres par portion. Et comme une adresse IP a 4 portions, nous aurons donc 8 * 4 chiffres, soit 32 chiffres dans la représentation binaire d’une adresse IP. ;)

Nous allons prendre une adresse simple pour commencer : 12.3.2.1.

Nous allons écrire cette adresse IP en binaire. Rappelez-vous, chaque portion (délimitée par un point) de l’adresse IP vaut 8 bits. Donc vous devez écrire 4 suites de 8 chiffres séparées par des points. Pour commencer, on va mettre tous ces chiffres à 0, pour voir pas à pas comment on procède. ;)

Nous avons donc :

0 0 0 0 0 0 0 0. 0 0 0 0 0 0 0 0. 0 0 0 0 0 0 0 0. 0 0 0 0 0 0 0 0

Voilà, nous y sommes presque. Nous avons écrit 32 chiffres, donc 4 groupes de 8 chiffres.

Chacun de ces chiffres ne doit valoir que 1 ou 0. Ici nous n’avons qu’une suite de zéros, cela veut dire que sa valeur correspondante en décimal serait 0.0.0.0. Mais nous voulons représenter 12.3.2.1, alors comment faire ?

Dans un nombre en binaire, chaque bit, s’il vaut 1, correspond à un certain nombre en décimal. Ainsi, de la droite vers la gauche on a :

  • chiffre 1 : 1
  • chiffre 2 : 2
  • chiffre 3 : 4
  • chiffre 4 : 8
  • chiffre 5 : 16
  • chiffre 6 : 32
  • chiffre 7 : 64
  • chiffre 8 : 128

Point vocabulaire important : si un bit vaut 1, on dit qu’il est allumé, sinon c’est qu’il est… éteint, bingo ! :D

Ainsi, dans un nombre en binaire, pour avoir sa correspondance en décimal, il suffit de regarder quels bits sont allumés (toujours de la droite vers la gauche), de noter leur correspondance en décimal et de faire la somme des correspondances et hop, vous avez le nombre en décimal ! Avouez que c’est moins compliqué que ça en avait l’air tout à l’heure. :)

Pour passer d’un nombre décimal à son équivalent en binaire, il faut décomposer le nombre décimal en une somme faisant intervenir les nombres correspondants à certains bits allumés (en fonction des possibilités) et ensuite, d’allumer les bits dont les correspondances sont utilisées.

On va tout de suite prendre un exemple avec notre conversion de 12.3.2.1 en binaire. Commençons par 12. Décomposons-le à partir des correspondances données ci-dessus : 12 = 8 + 4. Il nous faut donc allumer le bit dont la correspondance vaut 8 et celui dont la correspondance vaut 4 soit le 3ème et le 4ème en allant de la droite vers la gauche. Ce qui nous donne : 0 0 0 0 1 1 0 0. Et voilà, vous venez de représenter 12 en binaire. Faites pareil pour les 3 autres octets (ce n’est vraiment pas dur ;) ).

Ceci nous donne au final :

  • 1er octet : 00001100
  • 2ème octet : 00000011
  • 3ème octet : 00000010
  • 4ème octet : 00000001

Donc, l’adresse 12.3.2.1 en binaire c’est : 00001100 . 00000011 . 00000010 . 00000001

Connaître les puissances de deux vous facilitera vraiment la conversion. Avec un peu de pratique, ça deviendra automatique.

Voici donc le tableau récapitulatif sur un octet de la correspondance des bits :

Valeur décimale 128 64 32 16 8 4 2 1
Puissance de 2 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
Exemple : 8710 0 1 0 1 0 1 1 1

Jusqu’à présent, nous avons travaillé avec des nombres allant jusqu’à 255. Comment faire pour représenter en binaire des nombres plus grands ? Eh bien, il suffit d’étendre le tableau ci-dessus pour s’en rendre compte.

Valeur décimale 1024 512 256 128 64 32 16 8 4 2 1
Puissance de 2 2^10 2^9 2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0

Ainsi, si on souhaite représenter le nombre 1337, il suffit de le décomposer en puissances de deux :

1337 = 1024 + 256 + 32 + 16 + 8 + 1

1337 = 2^10 + 2^8 + 2^5 + 2^4 + 2^3 + 2^0

On peut donc écrire 133710 = 101001110012 !

La notation NOMBRE(BASE) est très courante et permet de préciser la base mathématique du nombre. Si on ne précise pas la base, c’est du décimal (base 10). Attention, 10 (décimal) est différent de 10(2) (binaire, ce qui fait 2 en décimal).

Pour terminer cette section, voici une astuce pour la conversion décimal - binaire qui vous facilitera la tâche, le temps de s’habituer. Commencez par écrire un tableau comme celui ci-dessus. Regardez la colonne la plus à gauche et si votre nombre est supérieur ou égal à cette puissance de 2, retranchez cette valeur à votre nombre et inscrivez 1 en dessous. Sinon, inscrivez 0. Continuez avec la colonne suivante jusqu’à arriver au bout.

Voici un exemple d’application de cette méthode pour écrire le nombre 30 en binaire. On prend 6 bits pour avoir suffisamment de place.

Valeur décimale 32 16 8 4 2 1
Puissance de 2 2^5 2^4 2^3 2^2 2^1 2^0
Nombre au départ : 3010 ? ? ? ? ? ?
30 n’est pas plus grand que 32, on continue 0 ? ? ? ? ?
30 est supérieur à 16, on fait 30 - 16 = 14 0 1 ? ? ? ?
14 est supérieur à 8, on fait 14 - 8 = 6 0 1 1 ? ? ?
6 est supérieur à 4, on fait 6 - 4 = 2 0 1 1 1 ? ?
2 est égal à 2, on fait 2 - 2 = 0 0 1 1 1 1 ?
0 est inférieur à 1, on inscrit un 0 0 1 1 1 1 0

On a ainsi 3010 = 0111102.

On a ici écrit la valeur sur 6 bits, mais on aurait aussi pu le faire sur 5 bits ou plus. Rajouter un zéro devant un nombre, quel qu’il soit, ne change pas sa valeur. Comme on travaille souvent avec des octets, donc des groupes de 8 bits, il est fréquent qu’on écrire les valeurs en binaire sur 8 chiffres en rajoutant des zéros inutiles. Cela ne change rien aux valeurs : 0111102 = 111102 = 000111102.

Un point sur l'hexadécimal

Vous avez réussi à appréhender le binaire pour, par exemple, calculer les masques en IPv4 ? Nous allons donc partir du binaire pour expliquer l'hexadécimal. Comme son nom l’indique, il s’agit de la base 16 (hexa : six, décimal : dix). Elle sert notamment à la notation des adresses IPv6.

En binaire, il y a 2 chiffres : le 0 et le 1. Pour représenter un nombre plus grand que 1, on rajoute un ou plusieurs chiffres. En décimal, c’est pareil : on écrit plusieurs chiffres pour représenter un nombre plus grand que 9. En hexadécimal, c’est pareil, mais on a 16 chiffres. Pour représenter un nombre plus grand que 15, on utilisera plus de chiffres.

Voici la correspondance entre nombres binaires, décimaux et hexadécimaux :

Décimal Binaire Hexadécimal
0 0 0
1 1 1
2 10 2
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
16 10000 10

Les chiffres hexadécimaux vont donc de 0 à F : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Nous ne nous intéresserons pas directement à la conversion hexadécimal - décimal, mais rien ne vous empêche de chercher par vous-mêmes. ;) Seule la conversion hexadécimal - binaire (et inversement) sera expliquée ici. Et c’est tout simple ! :)

Un chiffre hexadécimal se représente par 4 chiffres binaires. Complétons le tableau précédent en écrivant les zéros inutiles pour les nombres binaires.

Hexadécimal Binaire
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

Maintenant, pour convertir un nombre hexadécimal en binaire ou inversement, il vous suffira de vous reporter à ce tableau ! À vrai dire, on le retient par cœur assez rapidement, avec un peu d’entrainement.

Avec IPv6, on utilise souvent le nombre FE80(16). Qu’est-ce que ça donne en binaire ?

Il suffit de lire le tableau et de remplacer chaque chiffre hexadécimal par sa valeur décimale !

FE80(16) = 1111 1110 1000 0000(2)

Comme un chiffre hexadécimal correspond à 4 chiffres binaires, on sépare généralement les blocs de 4 bits pour y voir plus clair.

Et voilà ! :magicien:


Avant de clore ce chapitre, sachez que les ordinateurs ne peuvent traiter des valeurs numériques que sous forme d’octets. Le nombre 9810 peut ainsi être stocké sur un octet, car il faut 7 bits pour le représenter. En revanche, le nombre 25610 nécessite 9 bits, on doit alors nécessairement mobiliser 2 octets !

Désormais, vous êtes en mesure de convertir des nombres du binaire au décimal et à l’hexadécimal ! Outre la compréhension du subnetting, cela vous sera utile pour comprendre les systèmes de détection d’erreurs de transmission, que vous découvrirez dans une prochaine annexe.