Aller au menu - Aller au contenu

Du décimal au binaire


Informations sur le tutoriel

Avatar
Auteur : Dentuk
Visualisations : 190 013


Plus d'informations Plus d'informations

Historique des mises à jour

  • Le 05/07/2009 à 22:48:31
    Correction d'une erreur
Dans ce tutoriel, vous apprendrez à réaliser le codage d'un nombre décimal en binaire ainsi que le décodage d'un nombre binaire en décimal.
Nous aborderons également les systèmes hexadécimal et octal.

Système de numération et base

Les systèmes décimal, binaire et hexadécimal sont tous trois des systèmes de numération.
Ils sont associés à une base.

La base d'un système de numération est le nombre de symboles différents utilisables dans ce système de numération.

  • Le système décimal est associé à la base 10.
    En effet, on peut utiliser dix symboles dans ce système de numération, ce sont les chiffres de 0 à 9.
    C'est le système de numération que vous utilisez tous les jours.
  • Le système binaire est associé à la base 2.
    On peut effectivement utiliser deux symboles dans ce système de numération, à savoir 0 et 1.
    Cela peut correspondre à diverses choses, notamment :
    • en électricité, le courant passe (1) ou non (0) ;
    • d'une manière générale, vrai (1) ou faux (0).
    C'est ce système de numération qui permet de stocker des informations dans la mémoire de votre ordinateur.
    Chaque chiffre d'un nombre binaire est appelé bit, pour BInary digiT, soit chiffre binaire.

    Huit bits forment un octet.
    Avec n bits, on peut former 2n nombres différents.
  • Le système hexadécimal est associé à la base 16.
    On peut donc y utiliser seize symboles, il s'agit des chiffres de 0 à 9 et des lettres de A à F.
    Ce système de numération permet une écriture raccourcie du système binaire, nous verrons cela lorsque nous parlerons de transcodage.
  • Le système octal est associé à la base 8.
    On peut y utiliser huit symboles, qui sont les chiffres de 0 à 7.
    Il permet lui aussi une écriture raccourcie du système binaire ; cependant, il est nettement moins utilisé que le système hexadécimal.

La notation xbase permet de savoir dans quelle base un nombre x est donné.
De plus, quand un nombre est précédé d'un $, c'est qu'il est donné en hexadécimal, et d'un % en binaire.
Dans le cas d'un code de couleur, donné en hexadécimal, il est souvent précédé d'un #, comme dans le langage de présentation CSS.
Sans précision, il est en général donné en décimal.

Compter de 1 en 1 dans une base

Pour compter de 1 en 1 dans une certaine base, il suffit d'appliquer ce que vous avez vu à l'école primaire.
Vous le faites sûrement inconsciemment maintenant, mais voici ce que l'on vous a appris, valable pour la base 10 :
  • on part de 0 ;
  • on écrit chaque chiffre dans l'ordre qu'on a appris ;
  • une fois qu'on est à 9, on a épuisé tous les chiffres, on rajoute 1 dans la colonne des dizaines et on revient à 0 ;
    Si on doit rajouter 1 dans la colonne des dizaines et qu'on a épuisé tous les chiffres, on passe à 0 dans la colonne des dizaines et on rajoute 1 dans la colonne des centaines ;
  • et ainsi de suite.

Cela est valable pour toutes les bases, en remplaçant 9 par le dernier symbole dans la base en question.
Les exemples suivants sont à lire de gauche à droite, de haut en bas, en se disant bien qu'une ligne correspond à l'utilisation de chacun des symboles de la base.

Exemple avec la base 10 :
0123456789
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
... ... ... ... ... ... ... ... ... ...
90
91
92
93
94
95
96
97
98
99
100 101 102 103 104 105 106 107 108 109
110 111 112 113 114 115 116 117 118 119
... ... ... ... ... ... ... ... ... ...


Exemple avec la base 2 :
01
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
10000 10001
10010 10011
... ...


Exemple avec la base 8 :
01234567
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
20
21
22
23
24
25
26
27
... ... ... ... ... ... ... ...
70
71
72
73
74
75
76
77
100 101 102 103 104 105 106 107
110 111 112 113 114 115 116 117
... ... ... ... ... ... ... ...


Exemple avec la base 16 :
0123456789ABCDEF
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
90
91
92
93
94
95
96
97
98
99
9A
9B
9C
9D
9E
9F
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
AA
AB
AC
AD
AE
AF
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
100 101 102 103 104 105 106 107 108 109 10A 10B 10C 10D 10E 10F
110 111 112 113 114 115 116 117 118 119 11A 11B 11C 11D 11E 11F
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...

Tableau des nombres de 0 à 15 suivant la base

Je vous propose un petit tableau récapitulatif avec les nombres de 0 à 15 dans les quatre bases que nous étudions. :)

Base 2Base 8Base 10Base 16
0
0
0
0
1
1
1
1
10
2
2
2
11
3
3
3
100
4
4
4
101
5
5
5
110
6
6
6
111
7
7
7
1000
10
8
8
1001
11
9
9
1010
12
10
A
1011
13
11
B
1100
14
12
C
1101
15
13
D
1110
16
14
E
1111
17
15
F

Décomposition d'un nombre dans sa base et notion de poids

Un nombre donné dans une certaine base peut se décomposer dans celle-ci, en se mettant sous la forme suivante :
xnbn + xn - 1bn - 1 + ... + x1b1 + x0b0

Où :
  • b est la base dans laquelle il est donné, en vert sur la formule ;
    Remarque : b0 sera toujours égal à 1.
  • n est le nombre de chiffres du nombre ôté de 1 et correspond au plus grand poids ;
  • xy est le chiffre de poids y, en bleu sur la formule.

Le poids d'un chiffre correspond à sa position dans le nombre, en commençant par le poids 0 et en lisant de droite à gauche.
Il est en rouge sur la formule.
Pour un nombre donné en binaire, on appelle MSB ou bit de poids fort le bit ayant le poids le plus grand, et LSB ou bit de poids faible le bit ayant le poids le plus petit.

Exemple :
Dans le nombre 14410, le chiffre de poids 0 est 4, le chiffre de poids 1 est 4 et le chiffre de poids 2 est 1.
Sa décomposition dans sa base est donc :
14410 = 1 x 102 + 4 x 101 + 4 x 100.

En calculant, on retrouve bien 144 : 100 + 40 + 4 = 144.
Et c'est tout. :D

Décodage

On appelle décodage, le passage d'un nombre donné en une base quelconque vers la base 10.
Si vous avez compris la sous-partie précédente, vous n'aurez aucun mal à réaliser cela.
En effet, pour effectuer un décodage, il suffit de décomposer le nombre en question dans sa base et de calculer. :D

Pour vous aider, voici des tableaux des puissances de 2, 8 et 16 :

Puissances de 2


161514131211109876543210
65 536 32 768 16 384 8 192 4 096 2 048 1 024 512 256 128 64 32 16 8 4 2 1


Puissances de 8


876543210
16 777 216 2 097 152 262 144 32 768 4 096 512 64 8 1


Puissances de 16


876543210
4 294 967 296 268 435 456 16 777 216 1 048 576 65 536 4 096 256 16 1

Exemple avec la base 2 :
100111112
= 1 x 27 + 0 x 26 + 0 x 25 + 1 x 24 + 1 x 23 + 1 x 22 + 1 x 21 + 1 x 20
= 128 + 0 + 0 + 16 + 8 + 4 + 2 + 1
= 15910

Exemple avec la base 8 :
4578
= 4 x 82 + 5 x 81 + 7 x 80
= 4 x 64 + 5 x 8 + 7
= 256 + 40 + 7
= 30310

Exemple avec la base 16 :
AE216
= A x 162 + E x 161 + 2 x 160
= 10 x 162 + 14 x 161 + 2 x 160
= 10 x 256 + 14 x 16 + 2
= 2560 + 224 + 2
= 278610

Rappelez-vous si vous rencontrez des problèmes lors du calcul que poser une addition ne peut pas faire de mal. ;)

Codage

On appelle codage, le passage d'un nombre en base 10 vers une autre base.
Nous verrons deux manières de le faire.

Codage par divisions entières successives


La première façon consiste à diviser le nombre décimal par la base vers laquelle on veut le coder, jusqu'à obtenir un quotient tenant sur un symbole de cette base.
Le dividende est d'abord le nombre décimal en lui-même, puis le quotient obtenu.
Le diviseur est toujours la base.
Le premier reste trouvé est alors le chiffre de poids faible, et le quotient final le chiffre de poids fort.
Les autres restes forment les autres chiffres.
Il faut donc lire de droite à gauche les chiffres trouvés pour avoir notre nombre dans sa nouvelle base.

Exemple avec la base 2 :
Image utilisateur
13010 = 100000102


Exemple avec la base 8 :
Image utilisateur
54710 = 10438


Exemple avec la base 16 :
Image utilisateur
165810 = 67A16


Codage par soustractions successives


La deuxième méthode consiste à chercher le nombre de fois que l'on retrouve chacune des puissances de la base à l'aide de soustractions.
On cherche la puissance de la base égale ou tout de suite inférieure au nombre à coder, puis on la soustrait, et on recommence avec le résultat jusqu'à obtenir 0.
Le chiffre de poids p a alors pour valeur le nombre de fois que l'on a soustrait bp au nombre décimal.
Cette méthode devient vite compliquée avec une base autre que la base 2, car les puissances deviennent vite de gros chiffres.
Dans les autres cas, on préfèrera donc la méthode par division.

Exemple avec la base 2 :
On veut coder le nombre 13010 en base 2.
La puissance de 2, inférieure ou égale, la plus proche est 27 = 128.
130 - 128 = 2
La puissance de 2, inférieure ou égale, la plus proche est 21 = 2.
2 - 2 = 0
On a retrouvé 1 x 27 et 1 x 21, donc les bits de poids 1 et 7 seront à 1.
13010 = 100000102

Transcodage

On appelle transcodage, le passage d'une base autre que la base 10 à une autre base, elle aussi n'étant pas la base 10.

Je vous avais dit que les systèmes hexadécimal et octal permettaient une écriture raccourcie du système binaire, c'est ce que nous allons voir.

Vous vous souvenez quand je vous ai dit au début qu'avec n bits, on pouvait former 2n nombres différents ?
C'est de cela que l'on va se servir.

Transcodage entre binaire et octal


En application de cette formule, avec trois bits on peut former 23 nombres différents, soit 8.
Or, avec un chiffre en octal, on peut également former huit nombres différents.
Du coup, en regroupant par groupes de trois bits un nombre binaire, chaque groupe de trois bits correspond à un chiffre du nombre en base 8.
Au besoin, c'est-à-dire si l'on n'a pas un nombre de bits multiple de 3, on peut rajouter des zéros à gauche du nombre jusqu'à obtenir uniquement des groupes de 3, ce qui, comme en décimal, ne change rien au nombre.

Exemple : transcodage du nombre 111010012 vers la base 8.
  • Séparation en groupes de trois bits : 011 101 001.
  • Calcul des chiffres en base 8 correspondant à chaque groupe :
    • 0112 = 38
    • 1012 = 58
    • 0012 = 18
  • Remplacement des groupes de trois bits par leur équivalent en base 8 :
    111010012 = 3518


Exemple : transcodage du nombre 7628 vers la base 2.
  • Calcul des groupes de trois bits correspondant à chaque chiffre en base 8 :
    • 78 = 1112
    • 68 = 1102
    • 28 = 0102
  • Remplacement des chiffres en base 8 par les groupes de trois bits équivalents :
    7628 = 1111100102


Transcodage entre binaire et hexadécimal


Le transcodage entre les bases 2 et 16 fonctionne de la même façon, mais avec des groupes de quatre bits, qu'on appelle quartets.
Cela parce qu'avec quatre bits, on peut former 24 nombres différents, soit 16, et qu'avec un chiffre en hexadécimal, on peut également former seize nombres différents.

Exemple : transcodage du nombre 111010012 vers la base 16.
  • Séparation en quartets de bits : 1110 1001
  • Calcul des chiffres en base 16 correspondant à chaque groupe :
    • 11102 = 1410 = E16
    • 10012 = 910 = 916
  • Remplacement des quartets de bits par leur équivalent en base 16 :
    111010012 = E916


Exemple : transcodage du nombre A1816 vers la base 2.
  • Calcul des quartets de bits correspondant à chaque chiffre en base 16 :
    • A16 = 1010 = 10102
    • 116 = 110 = 00012
    • 816 = 810 = 10002
  • Remplacement des chiffres en base 16 par les quartets de bits équivalents :
    A1816 = 1010000110002

Pensez à utiliser le tableau des nombres de 0 à 15, vu plus haut, dans les différentes bases au besoin.

Application à un langage de programmation

Maintenant que vous savez tout cela, il serait bon de pouvoir en profiter dans vos programmes, si vous programmez.
Ce que je vais vous indiquer, est valable pour les langages de programmation s'étant inspirés de la notation utilisée en C pour exprimer un nombre en bases 8 et 16.
Cela comprend notamment C, C++, Java, PHP, Python et Ruby.
  • Pour indiquer un nombre en décimal, on indique simplement le nombre.
    Exemple :
    Code : C
    1
    int nombre = 20; /* nombre vaut 20 en base 10. */
    
  • Pour indiquer un nombre en octal, on le fait précéder d'un zéro.
    Exemple :
    Code : C
    1
    int nombre = 020; /* nombre vaut 20 en base 8, soit 16 en base 10. */
    
  • Pour indiquer un nombre en hexadécimal, on le fait précéder d'un zéro et d'un x.
    Exemple :
    Code : C
    1
    int nombre = 0x20; /* nombre vaut 20 en base 16, soit 32 en base 10. */
    

En Pascal, on fait précéder un nombre d'un signe $ pour indiquer qu'il est donné en hexadécimal.

Utilisations de l'octal et de l'hexadécimal

C'est bien beau d'avoir appris tout ça, mais on peut se demander à quoi ça sert.
Désolé si je vous déçois, mais le but de tout cela n'est pas uniquement le plaisir de se triturer le cerveau. :p

Utilisation de l'octal


L'octal peut être pratique dans le cas d'un système de droits d'accès où les droits se regroupent par trois.
C'est notamment le cas pour les systèmes de droits des systèmes basés sur UNIX (chmod, ça vous dit quelque chose ?).
Ainsi, on y utilise un nombre octal pour stocker les droits, c'est-à-dire un bit par droit :
  • si le MSB est à 1, alors le droit en lecture est accordé ;
  • si le bit de poids 1 est à 1, alors le droit en écriture est accordé ;
  • si le LSB est à 1, alors le droit en exécution est accordé.

Pour aller plus loin :


Utilisation de l'hexadécimal


Voici dans quels domaines l'hexadécimal peut être utilisé.
  • Pour représenter un motif binaire plus facilement qu'en passant par sa représentation décimale.
  • Pour indiquer le code d'une couleur, dans les langages de présentation type CSS, et dans les fichiers d'image dits en couleurs vraies.
    Une couleur est alors indiquée par trois octets, soit six chiffres hexadécimaux ; chaque octet représentant la quantité de rouge, de vert et de bleu utilisée pour former la couleur finale par des nombres allant de 0 à 255.

    Pour aller plus loin :
  • Vous connaissez peut-être l'Action Replay, il s'agit d'un appareil de triche pour les consoles de jeux.
    Il permet d'obtenir de nombreuses choses telles que de la vie à l'infini, et ce, pour la plupart des jeux.
    Vous ne vous êtes jamais demandés comment cela peut être possible ?
    En fait, les « codes Action Replay » sont composés d'une adresse mémoire et d'une valeur.
    Lorsque vous mettez l'interrupteur en position de marche, l'Action Replay modifie l'emplacement mémoire (l'octet, si vous préférez) situé à l'adresse en question en lui mettant la valeur souhaitée.

    Exemple avec un code de vie infinie :
    • l'Action Replay met l'emplacement correspondant à la vie à 0A16, soit 1010 points de vie ;
    • le personnage est touché ! ;
    • le jeu modifie l'emplacement mémoire ;
    • l'Action Replay le remet à 0A16.


    Et ainsi de suite.
    Dès lors, vous vous doutez que l'utilisation de l'Action Replay est très risquée.
    Si on modifie le mauvais emplacement, les dégâts peuvent être considérables.


Voilà, c'est la fin de cette petite parenthèse.
Il y a, bien entendu, de nombreuses autres utilisations, que vous découvrirez sûrement par vous-même au cours de votre périple dans les contrées de l'informatique. :D

Vous savez désormais réaliser un codage, un décodage et un transcodage.
J'espère que cela vous servira un jour, et que vous comprenez mieux comment sont stockés les nombres entiers dans la mémoire de votre ordinateur.

Informations sur le tutoriel

Retour en haut Retour en haut

Créé : Le 12/10/2007 à 17:01:58
Modifié : Le 05/07/2009 à 22:48:31
Avancement : 100%
Licence : Copie non autorisée

L'orthographe, la grammaire et la présentation de ce tutoriel ont été vérifiées par les zCorrecteurs.
31 commentaires