Decimal to binary

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

  1. Merci beaucoup j'ai réussi à résoudre mon problème du coup ! :p
    1. 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
      1. 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 ! :/
        1. 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.
          1. le principe est bon
            mais tes variables ne sont pas initialisées.
            que vaux i et x dans x=pow(2, i); ??
        2. 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