IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

conversion entier -> binaire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 26
    Par défaut conversion entier -> binaire
    Salut!

    J'essai de faire une conversion d'entier en binaire sur 32 bits, le prog demande d'entrer un entier, il le convertir en binaire, puis affiche le resultat de la conversion du bit de poids le plus fort (a gauche) au bit de poids le plus faible (a droite)

    J'affiche en ligne par bloc de 4 bit pour faciliter la lecture, mais il y a un problème sur le 10eme bit en partant de la droite; si il n'est pas affecté il prend la valeur 135089, mais si l'entier depasse 512 c'est ok.

    Que faire?

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    #include<stdlib.h>
    #include<stdio.h>
     
    int* bin(int e1)
    {
       int* t;
       unsigned long c,e; 
       int i,k,j; 
     
       k=0; c=0;i=0;
     
       e=e1;
       t=(int*)malloc(32); 
       c=e/2;
     
       while(c!=0)
       {
          t[i]=e%2; 
          i++;
     
          e=c;
          c=e/2;
       }
       t[i]=e;
     
       printf("\nLa valeur binaire de %lu est enregistree:\n",e1);
       printf("\n");
     
       for(j=31;j>=0;j--)
       { 
          if(k==4)
          {
             printf(" ");
             k=0;
             printf("%d",t[j]);
          }
          else
             printf("%d",t[j]);
          k++;
       }
       printf("\n");   
       return t;
    }
     
    main()
    {
       int i,k,z;
       int* tab;
     
       tab=(int*)malloc(32); 
       k=0;
       printf("Entrer la valeur d'un entier a convertir en binaire:\n");
       scanf("%d", &z);
     
       tab=bin(z);
     
       printf("et elle vaut:\n");
     
       for(i=31;i>=0;i--)
       {
          if(k==4)
          {
             printf(" ");
             k=0;
             printf("%d",tab[i]);
          }
          else
             printf("%d",tab[i]);
          k++;
       }   
       printf("\n");
    }

    voici ce que ca donne qd je le lance pour les valeurs 0, 511 et 512:

    Entrer la valeur d'un entier a convertir en binaire:
    0

    La valeur binaire de 0 est enregistree:

    0000 0000 0000 0000 0000 001350890 0000 0000
    et elle vaut:
    0000 0000 0000 0000 0000 001350890 0000 0000


    Entrer la valeur d'un entier a convertir en binaire:
    511

    La valeur binaire de 511 est enregistree:

    0000 0000 0000 0000 0000 001350891 1111 1111
    et elle vaut:
    0000 0000 0000 0000 0000 001350891 1111 1111


    Entrer la valeur d'un entier a convertir en binaire:
    512

    La valeur binaire de 512 est enregistree:

    0000 0000 0000 0000 0000 0010 0000 0000
    et elle vaut:
    0000 0000 0000 0000 0000 0010 0000 0000

    Merci ^^

  2. #2
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Salut, tu as essayé d'utiliser calloc au lieu de malloc? ca met tous les bits à 0.

    Sinon, dans ton main, tu n'as pas besoin de faire malloc, vu que tu récupères juste un tableau déjà alloué. Là ca cause une fuite de mémoire.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 26
    Par défaut re
    je viens d'essayer un calloc

    t=(int*)calloc(32,sizeof(char))

    et j'ai enlevé le malloc du main, ca change la valeur de l'erreur = 135129 mais il y en a toujours une

    sinon c'est la première fois que je post, je ne sais pas ce que sont des balises...

    merci pour ta reponse

  4. #4
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Jette un coup d'oeil la dessus pour commencer
    http://emmanuel-delahaye.developpez....tes.htm#malloc

  5. #5
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Jette un coup d'oeil la dessus pour commencer
    http://emmanuel-delahaye.developpez....tes.htm#malloc

  6. #6
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    salut

    moi je l'écrirais comme cela ton programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #include <stdio.h>
    int main() {
      int n;
      int i;
      char c;
      entree:
      puts("entrez un nombre : ");
      if (!scanf("%d",&n)) {
         while((c = getchar()) != '\n' && c != EOF);
         goto entree;
      }
      for (i = sizeof (int) * 8 - 1; i > 0 ; i--) {
        if (n & (1<<i)) {
            putchar('1');
            if (!(i & 3)) putchar(' ');
            i--;
            break;
        }
      }
      for (; i >= 0; i--) {
         if (n & (1<<i)) putchar('1');
         else putchar('0');
         if (!(i & 3)) putchar(' ');
      }
      putchar('\n');
      return 0;
    }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 26
    Par défaut
    j'ai lu le cours sur malloc et j'ai essayé de faire des modifications (avec ou sans cast ...) ca ne change rien,

    sinon le code que tu me donne marche mais j'ai besoin d'avoir acces au resultat sous forme d'un tableau 1D de 32 cases (1bit par case) et d'afficher les 32 bits.

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    Déjà je te conseille de ne pas utiliser d'allocation dynamique, utilise plutôt un tableau statique déclaré dans le main et passé en paramètre de ta fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void toBin(int n, int tab[]);
     
    int main(void)
    {
        int resultat[32] = {0}; // tout le tableau est initialisé à zéro
        int monEntier;
     
        // du code
     
        toBin(monEntier, resultat);
     
        // affichage du tableau resultat.
    }
    Je te conseille aussi de faire un code beaucoup plus concis et simple, parce que moi j'ai pu faire un code moitié moins long que le tien, même en retirant beaucoup de retours à la ligne inutiles dans ton code.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion entier en binaire
    Par philippe6 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 02/09/2011, 11h23
  2. Conversion d'entier en binaire sur 2 caractères
    Par seiryujay dans le forum C#
    Réponses: 2
    Dernier message: 10/07/2009, 14h51
  3. Conversion entiers longs > binaire
    Par Fabiani dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/02/2009, 01h55
  4. [debutant][hexadecimal]Conversion entier hexadecimal
    Par Mobaladje dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 14/05/2004, 07h50
  5. Affichage d'entiers en binaire.
    Par Tifauv' dans le forum C
    Réponses: 4
    Dernier message: 08/12/2003, 20h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo