Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zér0 > Les tutoriels > Non-Officiels > Programmation > Général > Lecture du tutoriel

Du décimal au binaire

Avatar
Auteur : Dentuk
Créé : le 12/10/2007 17:01:58
Modifié : le 28/10/2007 19:16:23
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
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.
Sommaire du chapitre :

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.


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 :

Ceci 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ù :

Le poids d'un chiffre correspond à sa position dans le nombre, en commençant au 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 ceci.
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
= 150610

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.
Alors, le chiffre de poids p a 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 3 bits on peut former 23 nombres différents, soit 8.
Or, avec un chiffre en octal, on peut également former 8 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.


Exemple : transcodage du nombre 7628 vers la base 2.


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 4 bits, qu'on appelle quartets.
Ceci car avec 4 bits, on peut former 24 nombres différents, soit 16, et qu'avec un chiffre en hexadécimal, on peut également former 16 nombres différents.

Exemple : transcodage du nombre 111010012 vers la base 16.


Exemple : transcodage du nombre A1816 vers la base 2.

Pensez à utiliser le tableau des nombres de 0 à 15 dans les différentes bases vu plus haut 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.

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 ceci n'est pas uniquement le plaisir de se triturer le cerveau. :p

Utilisations 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 :

Pour aller plus loin :


Utilisations de l'hexadécimal


Voici dans quels domaine l'hexadécimal peut être utilisé.


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êmes 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.
Auteur : Dentuk
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 242 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.0386s (0.0266s)