Decimal to binary

Fermé
dx3d Messages postés 68 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 19 juillet 2017 - 6 juin 2013 à 13:22
dx3d Messages postés 68 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 19 juillet 2017 - 10 juin 2013 à 16:26
Bonjour,

Donc je suis débutant en programmation et j'ai essayé de faire un simple code en c qui pourrait me donné la conversion binaire d'un nombre décimale, mais je me retrouve toujours avec un résultat pas tout à fait binaire, par exemple j'essaie pour 536(base 10), je me retrouve avec 2146435072 ... Bref voici le code si vous pouviez juste me dire ce qui va pas dessus je vous en serais reconnaissant :/.

#include <stdio.h>
#include <math.h>

int main(){
int x,i, a[16]={0};
int n;

x=pow(2,i);

printf("Veuillez entrer une valeur décimale ( inférieur à 65000 ):");
scanf("%d",&n);

for (i=16;i>=0;i--){
if (x<=n){
a[i]=1;
n=n-x;
}
else a[i]=0;

}
printf("\n");
printf("%d", a[i]);
printf("\n");
return 0;
}

5 réponses

dualife_ Messages postés 153 Date d'inscription dimanche 31 mars 2013 Statut Membre Dernière intervention 21 novembre 2020 45
6 juin 2013 à 13:32
Salut,
pourquoi tu utilise la fonction pow?
pire sur une variable non initialisée (i) donc le résulta n'est pas prédictible
et demande toi d'abord comment tu convertirai un nombre en binaire sur papier
ensuite traduit ce que ton code fait sur papier
tu devrai voir la difference
0
dx3d Messages postés 68 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 19 juillet 2017
6 juin 2013 à 13:42
Je converti par soustraction, en gros si je prend 536 sur papier et que j'essaie de la convertir j'ai les puissances de deux suivantes
1024 > 536 => 0
512 < 536 => 536 - 512 = 24 => 1
256 =>0
128 =>0
64 =>0
32 =>0
16 < 24 => 24-16 = 8 => 1
8 => 1
4 => 0
2 => 0
1 => 0

résultat = 1000011000; ce qui est un résultat correcte de 536 ( base 10 ) en binaire.

j'ai essayé de faire mon code sous le même principe, donc en prenant les puissances de 2 jusqu'à la puissance de 16 ( qui est dans les alentour de 65000 ) je demande à l'utilisateur de choisir un chiffre entre 0 et 65000 puis tant que la puissance de 2 est supérieur au chiffre choisi on met un 0 dans la case du tableau et dans le cas où la puissance de 2 est inférieur on met un 1 et on fait une soustraction du chiffre n choisi - la dite puissance de 2.
0
dualife_ Messages postés 153 Date d'inscription dimanche 31 mars 2013 Statut Membre Dernière intervention 21 novembre 2020 45
6 juin 2013 à 13:58
le principe est bon
mais tes variables ne sont pas initialisées.
que vaux i et x dans x=pow(2, i); ??
0
dx3d Messages postés 68 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 19 juillet 2017
6 juin 2013 à 14:12
J'ai mis le x à l'intérieur du for, maintenant pour i qui commence a 16 et qui ce réduit jusqu'à 0 on aura x qui aura les valeurs des 2^i.

Mais pour l'initalisation de ces deux variables est ce que c'est obligatoire ? Vu que je leur affecte des valeurs au départ dois je tout de même leur donné une valeur initiale ?

Aussi je crois que mon problème réside dans mon tableau, ce dernier à 16 cases mais lors du printf, seul 10 apparaissent et la valeur ne change pas peut importe la valeur décimale n ! :/
0
dualife_ Messages postés 153 Date d'inscription dimanche 31 mars 2013 Statut Membre Dernière intervention 21 novembre 2020 45
Modifié par dualife_ le 6/06/2013 à 15:23
demande toi pourquoi ça fonctionne et pas ton code
int main()
{
int n;
scanf("%d", &n);

 for (int i = 16; i != 0; --i)
 {
  if (n >= pow(2.0, i))
  {
   n -= pow(2.0, i);
   printf("1");
  }
  printf("0");
 }
 return 0;
}

indice: stockage et index
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dx3d Messages postés 68 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 19 juillet 2017
10 juin 2013 à 16:26
Merci beaucoup j'ai réussi à résoudre mon problème du coup ! :p
0