Decimal to binary

dx3d Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   -  
dx3d Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   -
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;
}
A voir également:

5 réponses

dualife_ Messages postés 153 Date d'inscription   Statut Membre Dernière intervention   45
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   45
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   45
 
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   Statut Membre Dernière intervention  
 
Merci beaucoup j'ai réussi à résoudre mon problème du coup ! :p
0