Tom's Guide > Forum > Programmation > convertisseur de base binaire, hexa et deci...

convertisseur de base binaire, hexa et deci...

Forum Programmation : convertisseur de base binaire, hexa et deci...

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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.

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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.

Répondre à dr_nova

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.

Répondre à Anonyme

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é !

Répondre à kelepoc

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)

Répondre à Anonyme

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 ?

Répondre à kelepoc

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.

Répondre à Anonyme

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;
}

Répondre à kelepoc

-> déclare ta chaine t correctement
->tu n'entre pas ta chaine au clavier
->nombrebinaire ne sert a rien..
->il faudra inclure string.h

Répondre à Anonyme

a oui j'avais fait une erreur en renommant les variables. merci beacoup pour toutes tes réponses !!

Répondre à kelepoc

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

Répondre à Jamel_71

Code :
  1. h |= (1 << i);


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.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Tom's Guide > Forum > Programmation > convertisseur de base binaire, hexa et deci...
Aller à :

Il y a 1308 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Liens