convertisseur de base binaire, hexa et deci...
Forum Programmation : convertisseur de base binaire, hexa et deci...
bonsoir a tous.
je fais actuellement un programme permettant de convertir le binaire en decimal, mais n'ayant aucune idée de comment faire, j'ai cherché sur internet et j'ai trouvé le source d'un programme qui fait ceci.
le problème est que je ne le comprend pas !
voila le passage concerné :
for(i=strlen(t)-1;i>=0;i--)
{
if (t[i]=='1') h+=j;
j=2*j;
}
strlen permet de connaitre le nombre de caractères dans une chaine non ? ensuite les instructions sont exécutées si i est >= a 0 et a chaque fois, i est décrémenté c'est sa ?
mais c'est la deuxième partie que je ne compren pas !! quelqu'un pour m'expliker svp ? merci d'avance.
Avec du VBA on peut le faire facilement avec Excel (DECBIN etc...)
En C# c'est plus facile, on peut le faire à l'aide de deux méthodes.
Avec un exemple tu va comprendre, on suppose que le nombre binaire est dans une chaine de caractère, par exemple :
10011
on commence avec le caractère tout à droite, il est egale a 1, donc on ajoute j (initialisé à 1) à h (initialisé à 0), puis on multiplie j par 2 pour passer à la puissance suivante.
on prend ensuite le prochain caraceter, il vaut un lui aussi, donc on ajoute j à h, et on multiplie j par 2
...
cela ainsi de suite jusqu'à la fin de la chaine.
A la fin, le résultat est contenu dans h.
heu.... non en fait j'ai pa trop compri (+ ou -) mais je comprend pas a koi correspond chaque étape que tu m'a di dans le bout de code que j'ai envoyé !
if (t[i]=='1') h+=j; => si c'est un 1, on ajoute j dans h (qui est le resultat)
j=2*j; => on passe a la puissance suivante
avec l'exemple :
10011 =>
1 : h=1 (j=2)
11 : h=1+2 (j=4)
011 : h=1+2 (j=8)
0011 : h=1+2 (j=16)
10011 : h=1+2+16 (j=32)
haa ok merci cool lol maintenant j'ai compris.
donc : if(t[i]=='1')h+=j; signifie que si c'est 1 on ajoute j dans h comme tu di.
mais pourquoi ne pas l'écrire : if(i=1){h=h+j} sa marche pas ?
La on manipule une chaine de caractère, et on peux la voir comme un tableau de caractère.
Pour tester chaque caractère du tableau t, on y accède grace a t[i] où i est la case du tableau.
Donc mettre if(i=1) serait faux.
h=h+j; par contre c'est bon.
alors quel est le problème dans ce code ??
int main(void)
{
texte t;
int nombrebinaire=0;
int h=0;
int j=1;
int i;
cout<<"Conversion de binaire en décimal : \n\n";
cout<<"Entrez votre nombre en base binaire : ";
cin>>nombrebinaire;
for(i=strlen(t)-1;i>=0;i--)
{
if (t[i]=='1') h+=j; /* si i=1, alors on ajoute j dans h */
j=2*j; /* on passe a la puissance suivante */
}
cout<<"\n";
cout<<"L'équivalent en décimal est : "<<h;
cout<<"\n\n";
system("PAUSE" );
return EXIT_SUCCESS;
}
-> déclare ta chaine t correctement
->tu n'entre pas ta chaine au clavier
->nombrebinaire ne sert a rien..
->il faudra inclure string.h
a oui j'avais fait une erreur en renommant les variables. merci beacoup pour toutes tes réponses !!
De rien a++
Regarde le code de ce convertisseur de bases. Il s'appuie sur deux fonctions principales qui permettent de convertir des nombres depuis nimporte quelle base vers n'importe quelle autre base.
cdt
Code :
|
en gros, ça prend 00...0001, on fait un décalage à gauche de i bits, et on fait un masque OU sur h pour mettre le bit à 1.
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Il y a 1308 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

CRicky