IPB

Bienvenue invité ( Connexion | Inscription )

> Jetons les bases de la conversion ..., Bon pour une migraine
Dude76
* 05/04/06 à 00:55
Message #1


Tordu
Group Icon

Groupe : Bergers
Messages: 179
Inscrit : 01/10/2005
Membre No. : 9 966
Niveau Atteint: 94



J'avais envie d'écrire une petite explication concernant les conversions numériques d'un base dans l'autre, de la base 10 vers la base 2 par exemple.

Qu'est-ce qu'une base ?
En fait, quand on parle de base n, on parle d'une base qui contient n éléments dans son "alphabet".
Autrement dit, elle ne possède uniquement QUE ces lettres (chiffres) pour écrire ses mots (nombres).
Dans une base 2, on ne possède que 2 lettres. La base 2 la plus connue parmi nous est le binaire, composé uniquement de 0 et de 1.
Notez que l'on pourrait noter une base 2 avec n'importe quel couple de symbole, '#' et '@' par ex, je vous laisse imaginer l'illisibilité d'un tel choix user posted image
Une autre base, que nous sommes sensé maîtriser parfaitement est la base 10, celle à laquelle appartient notre système décimal.
Parmis les bases et systèmes les plus connus, il y a donc la base 2 et le binaire, la base 8 et l'octal, la base 10 et le décimal, la base 16 et l'hexadécimal, etc.

Qu'est-ce qu'une base ? c'est donc "tout simplement" un système numérique permettant de représenter différemment les nombres.
Ces différents systèmes ont une utilité. Vous n'êtes pas sans ignorer que les ordinateurs calculent en binaire*, parlent en binaire et ils le font vite.
Pour eux, à l'inverse de nous, ils ont besoin de traduire 'nos nombres' (décimaux) vers 'leurs nombres' (binaires) pour les comprendre**.

* le courant passe, ou pas, il n'y a pas d'autre alternative smile.gif
Il ne passe pas: 0; Il passe: 1 (commentaire ajouté sur conseil de LeSingeMalicieux)
**nan, pas la peine de partir sur le troll "un ordinateur ne comprend rien" tongue.gif

Apprendre à compter...
Comment comptons-nous ?
Nous commençons par utiliser tout notre alphabet de chiffres sur 1 emplacement (que nous appelerons digit).
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ... et là, c'est le drame ! user posted image
Nous sommes condamnés à ne pas dépasser 9...
Du moins, nous l'étions, car un être supérieur en intelligence, l'élu d'une nation (gasp ! user posted image ) eut la géniale idée user posted image de passer sur 2 digits et de combiner à nouveau notre alphabet numérique.
Ainsi après 9 vint 10. 8)
Qu'est-ce que '10' ? '10', c'est '9', et même plutôt '09' que l'on augmente sur le 2ème digit et que l'on remet à zéro sur le 1er.
Après 10 vint 20, puis 30 ... jusque 99.
Après 99 ? rebolote, on ajoute un digit... 100 nait.

Autre système, même mécanisme...
Dans les autres bases et systèmes, le principe est exactement le même.
-En binaire: 0, 1. +1 ? 10 !
Et oui, 10 ! Ne confondez pas la notation avec la valeur smile.gif
ce qui donne par la suite, avec une évidence certaine ( user posted image ) 10, 11, 100, 101, 110, 111, 1000, etc.
-En hexadécimal (base 16) : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Comme vous l'aurez remarqué, notre alphabet commun n'a pas suffit, donc celui-ci a été complété par les premières lettres de l'alphabet (littéraire user posted image).
Les lettres (littéraires) ont pour valeur (dans notre système) : A=10, B=11, C=12, D=13, E=14 et F=15.
Qu'avons-nous après F ?
Aller, un effort ... Non, pas G... user posted image
Oui, vous y êtes ... 10, encore une fois smile.gif

Les systèmes ne 'bouclent' pas à la même vitesse; il faut donc trouver une astuce pour passer facilement de l'un à l'autre.

Conversion de notre système dans un autre système
La chose est en réalité assez aisé, mais il faut être pragmatique.
En effet, il suffit de diviser récursivement notre nombre par la cardinalité du système visé.
Un exemple sera bien plus parlant qu'une longue explication.
Convertissons une valeur pifométrique en binaire: 462.
462 = 2x231 + 0
231 = 2x115 + 1
115 = 2x57 + 1
57 = 2x28 + 1
28 = 2x14 + 0
14 = 2x7 + 0
7 = 2x3 + 1
3 = 2x1 + 1
1 = 2x0 + 1
Relevons les résultats (en remontant): 111001110.
Le digit ayant la plus grande valeur est à gauche puisque c'est celui qui a subit le grand nombre de divisions. On dit aussi qu'il est de poids fort (et celui de la fin, par opposition, est de poids faible).
(Tout comme notre 4 du 462 est le digit de poids fort et le 2 celui de poids faible).

Prenons maintenant un système de plus grande dimension que le notre : l'hexadécimal.
Reprenons notre valeur: 462.
462 = 16x28 + 14
28 = 16x1 + 12
1 = 16x0 + 1
ce qui donne: 1, 12(=C), 14(=E), ce qui s'écrit donc: 1CE. 8)


Conversion d'un autre système dans notre système
C'est l'exact contraire du paragraphe précédent: on multiplie récursivement chaque digit.
Ainsi donc, si il y a 3 digits, le digit de poids fort (le plus à gauche) sera multiplié 3 fois par la cardinalité n de la base, donc par n³.
Ainsi, nous avons là une manière rapide de revenir dans notre base.
Prenons le binaire, de base 2, donc des puissances successives de 2:
111001110
= 1x2^8 + 1x2^7 + 1x2^6 + 0x2^5 + 0x2^4 + 1x2³ + 1x2² + 1x2 + 0x2°
= 1x256 + 1x 128 + 1x64 + 1x8 + 1x4 + 1x2
= 462. \o/

A partir de l'hexadécimal:
1CE
= 1x16² + Cx16 + Ex16°
= 1x256 + 12x16 + 14x1
= 256 + 192 + 14
= 462. \o/ (derechef user posted image )

Un exemple plus fun: les Shadoks
Commençons par un rappel sommaire ...
QUOTE
Le calcul a toujours donné beaucoup de fil à retordre aux Shadoks...
En effet n'ayant que quatres
cases il ne pouvait pas compter plus que quatre... 1, 2, 3, 4...
Mais le professeur Shadoko avait réformé tout ca...

Quand il n'y a pas de Shadoks, on dit GA
Quand il y a un shadok de plus, on dit BU
Quand il y a encore un shadok de plus, on dit ZO
Et quand il y a encore un autre, on dit MEU .

Si je mets un shadok en plus, évidement, je n'ai plus assez de
mots pour les compter...

user posted image
Alors c'est très simple: on les jette dans une poubelle, et je dis que j'ai BU poubelle.
Et pour ne pas confondre avec le BU du début, je dis qu'il n'y a pas de Shadok à coté de la poubelle et j'écris BU GA.
user posted image
Bu Shadok à coté de la poubelle: BU BU.
Un autre : BU ZO.
Encore un autre : BU MEU.
...

MEU poubelles et MEU Shadoks à coté : MEU MEU.
Arrivé là si je mets un Shadok en plus, il me faut une autre poubelle.
Mais comme je n'ai plus de mots pour compter les poubelles, je m'en débarrasse en les jetant dans une grande poubelle. J'écris BU grande poubelle avec pas de petite poubelle et
pas de Shadok à coté : BU GA GA.
Et on continue... BU GA BU, BU GA ZO....
user posted image
MEU MEU ZO, MEU MEU MEU.

Quand on arrive là et qu'on a trop de grandes poubelles pour pouvoir les compter, eh bien,
on les met dans une super poubelle, on écrit BU GA GA GA, et on continue...


Que pouvons-nous dire du système Shadok ?
-Il s'agit -contre toute attente, je vous l'accorde :mrgreen:- d'un système cohérent biggrin.gif
- système de base 4: Ga, Bu, Zo, Meu.

Pour une question de facilité, posons Ga = 0, Bu = 1, Zo = 2 et Meu = 3.
Essayons de convertir notre 462 en shadok (on décompose selon les puissances de 4, ce qui est parfaitement équivalent aux divisions successives) :
462
= 115x4 + 2
= (28x4 +3)x4 + 2 = 28x4² + 3x4 +2x4°
=7x4³ + 0x4² + 3x4 + 2x4°
= 1x4^4 + 3x4³ + 0x4² + 3x4 + 2x4°
= 13032 en base 4
= Bu Meu Ga Meu Zo en shadok 8)

Vérifions:
Bu Meu Ga Meu Zo
= 1 3 0 3 2
= 1x4^4 + 3x4³ + 0x4² + 3x4 + 2x4°
= 256 + 64 + 12 + 2
= 462 smile.gif

La Base 64
Généralement, les alphabets des systèmes reprennent notre arithmétique traditionnelle (de 0 à 9), et on a vu que l'hexadécimal reprend de départ de notre alphabet littéraire pour combler son cruel manque.
Au travers de l'extension LeetKey pour firefox qui permet pas mal de traductions (binaire, hexa, morse, ... ), j'ai été amené à me pencher sur la 'base 64'.
Celle-ci est d'ailleurs également utilisée pour encoder rapidement des champs que l'on veut humainement illisible naturellement dans les pages html.
Cette fameuse base 64 est construite un peu différemment (http://fr.wikipedia.org/wiki/Base_64) : de A à Z, puis de a à z, de 0 à 9, et, enfin, '+' et '/'. Il y a également '=' qui sert à compléter (vous allez voir rapidement pourquoi smile.gif ).
On a donc A=0, /=63.

L'encodage se fait par groupes de 24 bits (= 3 octets) avec pour résultat une chaîne de 4 caractères. Chaque caractère représente donc 6 bits.
Lorsque l'on arrive sur le dernier groupe à encoder, s'il n'est pas assez grand pour faire 24 bits, on le complète comme il faut avec des '=' (16 bits user posted image '=' en complément, 8 bits user posted image '==' en complément).
Les compléments sont calculés à partir de positions d'octets, n'oubliez pas qu'on est en informatique wink.gif



Vous pouvez détacher vos ceintures et prendre une aspirine user posted image


--------------------

Aide par MP (pas de solutions).
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Les messages de ce sujet


Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 Membre(s):

 






Version bas débit Nous sommes le : 12/12/17 à 18:53