Se connecter / S'enregistrer
Votre question

convertisseur de base binaire, hexa et deci...

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
Anonyme
27 Décembre 2006 18:08:30

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=='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.

Autres pages sur : convertisseur base binaire hexa deci

27 Décembre 2006 21:59:52

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.
Anonyme
27 Décembre 2006 22:14:04

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.
Contenus similaires
Anonyme
27 Décembre 2006 22:37:10

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é !
Anonyme
27 Décembre 2006 22:45:33

if (t=='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)
Anonyme
27 Décembre 2006 22:56:47

haa ok merci cool lol maintenant j'ai compris.
donc : if(t=='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 ?
Anonyme
27 Décembre 2006 23:13:33

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 où i est la case du tableau.
Donc mettre if(i=1) serait faux.

h=h+j; par contre c'est bon.
Anonyme
27 Décembre 2006 23:18:13

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=='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;
}
Anonyme
27 Décembre 2006 23:26:47

-> déclare ta chaine t correctement
->tu n'entre pas ta chaine au clavier
->nombrebinaire ne sert a rien..
->il faudra inclure string.h
Anonyme
27 Décembre 2006 23:30:41

a oui j'avais fait une erreur en renommant les variables. merci beacoup pour toutes tes réponses !!
Anonyme
27 Décembre 2006 23:34:24

De rien a++
21 Janvier 2009 21:25:46

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
a b L Programmation
4 Décembre 2009 19:32:13

  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.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS