Base 2 (binaire) et base 16 (hexadécimale)


Description

Ce tutoriel vous apprend à compter, calculer et convertir les base 2 et base 16.

Base 2 (binaire) et base 16 (hexadécimale)

 

Apprendre à compter en binaire ou en hexadécimal peut vous paraître compliqué, mais sachez que si vous avez été jusqu'au collège vous saurez compter, calculer et convertir ces bases.

 

Introduction

A l'école on vous apprend à compter en base 10, qu'on appelle décimale. C'est une base comprenant seulement 10 chiffres (de 0 à 9) et avec cette base on peut compter jusqu'à l'infini (comme toutes les autres).

Mais un ordinateur lui fonctionne à base de signaux, il y a le signal allumé et le signal éteint. Il ne sait donc reconnaître que deux choses et à ces signaux on a attribué des valeurs, 0 quand le signal est éteint et 1 quand le signal est allumé, c'est un peu comme ça qu'est né la base 2. (je ne vais pas faire un cours d'histoire non plus).

 

Le binaire est constamment utilisé par votre ordinateur, il lit des millions de 0 et de 1 chaque seconde, c'est la seule chose qu'il sait faire.

L'hexadécimal, lui a été inventé pour faciliter la lecture d'une valeur binaire car la conversion entre ces deux bases est très facile à réaliser pour un ordinateur.

 

Base 2 (binaire)

Comme je l'ai dit le binaire est composé de deux valeurs : 0 et 1, vous allez apprendre facilement à compter, calculer et convertir facilement cette base !

 

Base 2 (binaire): Compter

Lorsque l'on compte en binaire, on compte toujours de droite à gauche, c'est important.

Chaque chiffre (0 ou 1) est appelé 1 bit, un paquet de 4 bits est appelé un quartet et un paquet de 8 bits est appelé un octet. Par convention nous travaillons sur des octets pour représenter un paquet, mais ici j'utiliserai volontairement des quartets pour vous apprendre à compter.

 

Voici par exemple la valeur 0 sous forme de quartet : 0000

Comme je l'ai dit, nous lisons de droite à gauche, donc si nous commençons à compter jusqu'à 3 avec notre quartet :

0000 : 0

0001 : 1

0010 : 2

0011 : 3

 

Comment passons-nous de 0001 à 0010 en augmentant la valeur de 1 ? Je vais vous expliquer la logique qui est la même en décimal :

Prenons le nombre 38, lorsque nous augmentons sa valeur de 1, il devient 39 et si nous augmentons une seconde fois sa valeur de 1, il devient 40. Pour vous, c'est logique et bien en binaire c'est pareil.

Nous comptons en base 2 et base 10 de droite à gauche et lorsque la valeur maximale en base 10 (qui est 9) est atteinte, nous agissons sur le chiffre qui le suit.

Petit rappel pour le nombre 39 : 3 est la dizaine et 9 est l'unité.

Lorsque nous augmentons 39 de 1, nous agirons sur l'unité qui actuellement est 9, donc nous le remettons l'unité à 0, nous retenons 1 que nous ajouterons à notre dizaine.

39 -> 40 (9 devient un 0 et le 3 devient un 4)

 

En binaire c'est pareil, sauf que pour rappel, la valeur maximale en base 2 est 1.

0001 : ici je souhaite augmenter de 1 cette valeur binaire, je remarque que le premier bit est à sa valeur maximale, je remets le premier bit à 0, je retiens 1 que j'ajoute au deuxième bit, si ce deuxième bit vaut 0, alors il vaudra 1.

 

Si vous comprenez la logique alors vous comprendrez que lorsque l'on augmente de 1 la valeur 3 en binaire, on passe de 0011 à 0100.

Au cas où, j'explique quand même : 0011 -> le premier bit vaut 1, je le remets à 0, je retiens 1, je l'ajoute au deuxième, sauf que celui-ci vaut déjà 1, donc je le remets à 0, je retiens 1, je l'ajoute au troisième bit, celui-ci vaut 0, il vaut donc maintenant 1, ce qui me donne 0100 (4).

 

Avec un quartet, nous pouvons compter jusqu'à 15 :

0000 : 0
0001 : 1
0010 : 2
0011 : 3
0100 : 4
0101 : 5
0110 : 6

0111 : 7
1000 : 8
1001 : 9
1010 : 10
1011 : 11
1100 : 12
1101 : 13
1110 : 14
1111 : 15

 

Avec un octet, nous pouvons compter jusqu'à 255 : je ne vais évidemment pas vous énumérer tout ça, à vous de vous entraîner.

 

Base 2 (binaire): Calculer

Vous allez voir que c'est très très simple, car je ne mentionnerai que l'addition comme calcul, le reste est plus complexe. (la soustraction peut-être comprise si vous comprenez la logique de l'addition).

 

Prenons deux valeurs décimales 5 et 10 et maintenant regardons leur valeur binaire :

0101 : 5

1010 : 10

 

En mathématique, 5 + 10 = 15.

Si nous regardons bien, en assemblant les 1 et les 0 de ces deux valeurs, nous obtiendrions 1111, soit la valeur 15 en binaire.

 

Prenons maintenant 3 et 5 et maintenant regardons leur valeur binaire :

0011 : 3

0101 : 5

 

En mathématique 3 + 5 = 8.

Si nous regardons bien, en assemblant les 1 et les 0 de ces deux valeurs, nous obtiendrions 1000, soit la valeur 8 en binaire.

Là c'est un peu plus complexe car le premier bit de 3 et 5 valent tous les deux 1 et pourtant si nous suivons la logique des calculs décimaux, c'est pareil.

0011 (3) + 0101 (5) -> On prend le premier bit de 3 qui vaut 1 pour l'ajouter au premier bit de 5, mais il vaut déjà 1, donc nous le mettons à 0, nous retenons 1, on l'ajoute au deuxième bit de 5 car il vaut 0, nous ajoutons maintenant le deuxième bit de 3 qui vaut 1, mais il vaut déjà 1 (car nous venons de l'ajouter, faut suivre :p), donc nous le mettons à 0, nous retenons 1, on l'ajoute au troisième bit de 5, mais il vaut déjà 1, donc nous le mettons à 0, nous retenons 1, on l'ajoute au quatrième bit de 5, il vaut 0, on peut l'ajouter, cela donne donc 1000 en binaire.

 

Hésitez pas à prendre une feuille et un stylo en faisant des calculs dessus.

 

Base 2 (binaire): Convertir

Convertir un nombre sous sa forme binaire en forme décimale ou l'inverse est très simple, il vous suffit d'avoir les bonnes règles dans votre tête.

 

Prenons la valeur 1789 (année de la prise de la Bastille pour les incultes) :

Nous allons apprendre à transformer cette valeur en base 2, mais avant ça il faut s'énumérer la valeur de chaque puissance de 2 sur deux octets, donc de 2^0 (2 puissance 0) à 2^15 (2 puissance 15).

Voici pour vous :

2^0	1	00000000 00000001
2^1	2	00000000 00000010
2^2	4	00000000 00000100
2^3	8	00000000 00001000
2^4	16	00000000 00010000
2^5	32	00000000 00100000
2^6	64	00000000 01000000
2^7	128	00000000 10000000
2^8	256	00000001 00000000
2^9	512	00000010 00000000
2^10	1024	00000100 00000000
2^11	2048	00001000 00000000
2^12	4096	00010000 00000000
2^13	8192	00100000 00000000
2^14	16384	01000000 00000000
2^15	32768	10000000 00000000

Avec ceci, nous pouvons donc convertir la valeur 1789 sous la forme binaire, voici la logique :

SI 1789 est plus grand ou égal à 2^n alors le "n + 1"ième bit vaut 1 et on retire la valeur 2^n à 1789.

SINON le "n + 1"ième bit vaut 0 

Et on recommence jusqu'à 2^0.

 

Donc dans notre cas

A = 1789

A = 1024 + 512 + 128 + 64 + 32 + 16 + 8 + 4 + 1

A = 2^10 + 2^9 + 2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^0

A = 00000110 11111101

 

Avec un code que j'ai réalisé, voici un schéma de la conversion :

A vaut 1789   - A est plus petit que 32768,           on ajoute 0
A vaut 1789   - A est plus petit que 16384,           on ajoute 0
A vaut 1789   - A est plus petit que 8192,            on ajoute 0
A vaut 1789   - A est plus petit que 4096,            on ajoute 0
A vaut 1789   - A est plus petit que 2048,            on ajoute 0
A vaut 1789   - A est plus grand ou est égal à 1024,  on ajoute 1 et on retire 1024 à A
A vaut 765    - A est plus grand ou est égal à 512,   on ajoute 1 et on retire 512 à A
A vaut 253    - A est plus petit que 256,             on ajoute 0
A vaut 253    - A est plus grand ou est égal à 128,   on ajoute 1 et on retire 128 à A
A vaut 125    - A est plus grand ou est égal à 64,    on ajoute 1 et on retire 64 à A
A vaut 61     - A est plus grand ou est égal à 32,    on ajoute 1 et on retire 32 à A
A vaut 29     - A est plus grand ou est égal à 16,    on ajoute 1 et on retire 16 à A
A vaut 13     - A est plus grand ou est égal à 8,     on ajoute 1 et on retire 8 à A
A vaut 5      - A est plus grand ou est égal à 4,     on ajoute 1 et on retire 4 à A
A vaut 1      - A est plus petit que 2,               on ajoute 0
A vaut 1      - A est plus grand ou est égal à 1,     on ajoute 1 et on retire 1 à A

On obtient donc pour 1789 : 00000110 11111101

 

Et l'inverse est facilement réalisable, prenons la valeur binaire : 01010001 10101001

En se basant sur l'énumération des puissances de 2 :

A = 01010001 10101001

A = 2^14 + 2^12 + 2^8 + 2^7 + 2^5 + 2^3 + 2^0

A = 16384 + 4096 + 256 + 128 + 32 + 8 + 1

A = 20905

 

Vous pouvez aller vérifier, 20905 en binaire donne bien 01010001 10101001 et inversement.

Voici pour vous : http://www.binaryconvert.com/result_signed_int.html

 

Base 16 (hexadécimal)

La notation hexadécimale est particulière car elle se base sur 16 valeurs, les 10 premières sont les chiffres de 0 à 9 et les 6 autres sont les 6 premières lettres de l'alphabet latin.

Nous allons donc voir quelle lettre correspond à quel nombre dans le sous-chapitre pour compter en base 16 !

 

Mais juste avant pourquoi avoir appelé cette notation "hexadécimal" ?

Décortiquons d'abord ce mot en deux : "hexa" et "décimal" : 

"Décimal" vient du Latin où "dix" se dit "decem" qui est devenu "decim" et auquel on a ajouté le suffixe -al.

"Hexa" vient du grec où "six" se dit "hexa".

On obtient donc six et dix, qui donne seize, voilà voilà. (Merci à Wiktionary pour les précisions des langues anciennes)

 

Base 16 (hexadécimal): Compter

En base 2 et base 10, on compte de droite à gauche et bien en base 16 c'est l'inverse. Nous savons que l'hexadécimal a une valeur maximale de 15 en comptant le 0, ça nous donne 16 valeurs, regardons comment compter jusqu'à 15 en hexadécimal alors !

0x0    ->    0
0x1    ->    1
0x2    ->    2
0x3    ->    3
0x4    ->    4
0x5    ->    5
0x6    ->    6
0x7    ->    7
0x8    ->    8
0x9    ->    9
0xA    ->    10
0xB    ->    11
0xC    ->    12
0xD    ->    13
0xE    ->    14
0xF    ->    15

On remarque que jusqu'à 9 tout est normal et qu'après nous utilisons des lettres pour atteindre le nombre 15 qui est 0xF en hexadécimal.

Regardons maintenant comment se déroule suite logique après 15 en hexadécimal :

0xF    ->    15
0x10   ->    16
0x11   ->    17
0x12   ->    18
0x13   ->    19
0x14   ->    20
0x15   ->    21
0x16   ->    22
0x17   ->    23
0x18   ->    24
0x19   ->    25
0x1A   ->    26
0x1B   ->    27
0x1C   ->    28
0x1D   ->    29
0x1E   ->    30
0x1F   ->    31
0x20   ->    32

C'est bien différent de la base 2 !

Alors précisons une chose importante pour que les explications soient claires, pour rappel un quartet peut contenir 4 bits et en binaire 1111 vaut 15, on comprend donc que lorsque l'on regarde une valeur hexadécimale, chaque caractère est un quartet.

 

0xF (15) = quartet

0xFF (255) = octet

 

Donc, je vais parler en quartet pour vous apprendre à compter en hexadécimal :

Lorsque nous avons un quartet et que celui-ci atteint sa valeur maximale, le quartet derrière aura la valeur 1 est les autres auront la valeur 0.

Dans le cas où le quartet derrière n'existe pas, alors on agit sur le premier quartet, c'est le cas du passage de 15 à 16.

 

Donc si nous prenons : 0xF (15) et que nous augmentons sa valeur de 1, en hexadécimal 0xF devient 10 (16 en décimal).

Un exemple un peu plus concret : 0xFF (255) et que nous augmentons sa valeur de 1, en hexadécimal 0xFF devient 100 (256 en décimal).

 

Et pour continuer d'augmenter la valeur de 0x100 (256 en décimal), on agira sur le dernier quartet, donc 257 en décimal devient 0x101 en hexadécimal.

Que se passe-t'il lorsque l'on arrive à 0x10F (271 en décimal) ? Comme je l'ai dit le dernier quartet aura la valeur 0 et le quartet derrière aura la valeur 1, donc 0x10F augmenté de 1 sera 0x110 (272 en décimal).

 

Cliquez ici pour étudier de plus près la suite de 0x0 à 0xFFF.

 

Base 16 (hexadécimal): Calculer

La logique est la même qu'en binaire et c'est même plus simple je trouve.

Prenons le calcul suivant : 26 + 84 son résultat vaut 110, prenons maintenant ces valeurs sous leur forme hexadécimale : 0x1A (26) et 0x54 (84).

 

Je vais simplement les aligner et vous donner le résultat avec une explication par la suite :

0x1A (26)
+
0x54 (84)
=
0x6D (110)

On a simplement additionné 1 et 5, ce qui donne 6 et ensuite 0xA (10) et 4 ce qui donne 14 (0xD), on a donc 0x6D.

 

Maintenant passons à un calcul un peu plus complexe, mais rien de bien méchant : 26 + 86, sont résultat vaut 112, faisons le calcul en hexadécimal :

0x1A
+
0x56
=
0x70

Argh, ça se complique! Et pourtant si vous avez compris le principe des retenues en binaire et en décimal, c'est la même chose en hexadécimal.

On additionne 1 et 5, ce qui donne 6 et ensuite 0xA (10) et 6 ce qui donne 16 (0x10), nous devons donc remettre à 0 le quartet et ajouter 1 au quartet derrière, qui vaut 6 et devient un 7, on a donc 0x70.

 

Base 16 (hexadécimal): Convertir

Comme la base 2, convertir dans les deux sens (base 10 -> base 16 OU base 16 -> base 10) est très simple.

 

Reprenons la valeur 1789 (oui je l'aime!), nous allons la convertir sous sa forme hexadécimale.

La règle pour que la conversion fonctionne est la suivante : nous divisons la valeur 1789 par 16, nous récupérons son quotient et son reste, si le quotient est supérieur à 16, nous recommençons la même opération en remplaçant 1789 par le quotient obtenu jusqu'à ce que le quotient soit inférieur à 16. Nous prendrons ensuite dans l'ordre, le dernier quotient obtenu, puis le reste de chacune des opérations.

 

Exemple :

1789 / 16 = 111, il reste 13
111 / 16 = 6, il reste 15

 

J'ai mis en gras les valeurs qui nous intéressent, ce qui nous donne donc pour 1789 : 0x6FD (6, 15 et 13).

 

Maintenant prenons 0x7AF2 et tentons de récupérer sa forme décimale. La règle est simple : c'est la somme des multiplications par 16 puissance "la position du quartet". 

Exemple :

A = 0x7AF2
A = (7 * 16^3) + (10 * 16^2) + (15 * 16^1) + (2 * 16^0)
A = 31474

J'espère que vous avez compris, car la logique est simple même si mon explication n'est pas très claire, mais j'ai pas voulu pousser sur une explication avec le symbole de somme (∑) et des variables réelles.

 

Conversion entre base 2 et base 16

Comme je l'ai mentionné, un caractère en hexadécimal équivaut à un quartet et un quartet ne peut contenir qu'au maximum la valeur 15, alors il est facile de faire la conversion.

Prenons 0xF5F5, nous avons 4 quartets, donc 2 octets, tentons la conversion : 1111 0101 1111 0101

Et si on respecte la convention : 11110101 11110101.

 

Vous comprenez pourquoi il est plus facile pour un ingénieur de lire une valeur hexadécimale et la retranscrire facilement en binaire si besoin.

L'inverse est aussi facile, mais je vais vous épargner un exemple direct, logiquement si vous avez tout compris, alors vous saurez le faire vous même.




1 Commentaire

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant