Problème de "bit" à 1024, en binaire...

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour à toutes et à tous,
J'aimerais savoir, je fais un programme en C avec Dev C++. J'ai un but précis, c'est d'avoir un chiffre et de le transformer en binaire. Quand cela est fait, je sonde dans ce binaire, tout les chiffres à "1", et noter leur puissance. Exemple: 2puissance3 = 8 . Cela correspondera au 3ème chiffre à "1" de mon chiffre. Exemple: 9 => 1001, il notera comme cela dans mon programme à la sortie:
8: OK
4: ...
2: ...
1: OK

Mais tout cela je l'ai déjà fait avec mon code ci-dessous. Mon problème est la limite de 1023. Quand je mets un chiffre au-dessus de celui-ci, il me fait un tas de chiffre bizarre et me fausse tout. Dois-je faire des "long" ou "double" etc.. J'ai déjà essayé, mais ça marche pas. Aidez-moi !

    /* Conversion binaire <-> decimale */
    
    #include <stdio.h>
    #include <math.h>
    
    main(void)
    {
     char Temp[255],  StringValeur[255];
     int Incrementation, Incrementation2;
     int Chiffre_Multiplication;
     int Nombre, Valeur;
     
     // L'utilisateur entre un nombre décimale entier
     printf ("Veuillez entrer votre chiffre: ");
     scanf("%d", &Nombre);     

     // La valeur en entier sera transformer binaire, 
     // puis reviendra en entier avec le code binaire.
     Valeur = atoi(itoa(Nombre, Temp, 2));
     
     // Met dans un tableau chaque 1 & 0 à un emplacement
     sprintf(StringValeur, "%d\n", Valeur);
     printf ("%s\n", StringValeur);
     
     // Incremente de la fin jusqu'à 0 (normalement)
     Incrementation2 = (strlen(StringValeur)-2);
     
     // Incremente de 0 jusqu'à /0
     for (Incrementation = 0; Incrementation < 
     (strlen(StringValeur)-1); Incrementation++)
     {
         // Fait une 2 puissance "i", 1..2..4..8..16..32 etc... 
         Chiffre_Multiplication = pow(2, Incrementation2);
         
          // Si dans le tableau qu'on est entrain de sonder, 
         // il y a un 1, on rentre dedans pour faire "ok".
         if(StringValeur[Incrementation] == '1')
         {
          printf("%d:\t OK\n", Chiffre_Multiplication);
         }
         else
         {
          printf("%d:\t ..\n", Chiffre_Multiplication);
         }
         Incrementation2--;
     }
     getch();
   } 

5 réponses

Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
 
Salut,

En fait il suffit de retirer ton atoi à ton programme et de tout mettre dans le sprintf

    /* Conversion binaire <-> decimale */
    
    #include <stdio.h>
    #include <math.h>
    
    main(void)
    {
     char Temp[255],  StringValeur[255];
     int Incrementation, Incrementation2;
     int Chiffre_Multiplication;
     int Nombre, Valeur;
     
     // L'utilisateur entre un nombre décimale entier
     printf ("Veuillez entrer votre chiffre: ");
     scanf("%d", &Nombre);     

     sprintf(StringValeur, "%s\n", itoa(Nombre, Temp, 2));
     printf ("%s\n", StringValeur);
     
     // Incremente de la fin jusqu'à 0 (normalement)
     Incrementation2 = (strlen(StringValeur)-2);
     
     // Incremente de 0 jusqu'à /0
     for (Incrementation = 0; Incrementation < 
     (strlen(StringValeur)-1); Incrementation++)
     {
         // Fait une 2 puissance "i", 1..2..4..8..16..32 etc... 
         Chiffre_Multiplication = pow(2, Incrementation2);
         
          // Si dans le tableau qu'on est entrain de sonder, 
         // il y a un 1, on rentre dedans pour faire "ok".
         if(StringValeur[Incrementation] == '1')
         {
          printf("%d:\t OK\n", Chiffre_Multiplication);
         }
         else
         {
          printf("%d:\t ..\n", Chiffre_Multiplication);
         }
         Incrementation2--;
     }
     getch();
   } 
Bonne chance
1