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 :

probleme avec tableau


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Par défaut probleme avec tableau
    bonjour,je veux créer un tableau de bits de taille maximale égale à 32 .comment faire exactement??

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu ne peux pas en C, faire directement un "tableau" de "bits", car les bits ne sont pas individuellement adressables.

    Par contre, tu peux faire un tableau de char de CHAR_BIT (défini dans <limits.h> il me semble, ne peut pas être inférieur à huit) bits chacun...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Par défaut
    merci pour la reponse mais j'ai besoin de 32 bits non pas de 8.et je veux savoir comment faire pour transformer un ensemble d'identifiants {1,3,6,9} par exemple en un tableau de bits 01010010010 par exemple

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Par défaut
    Bonjour,

    Je suis curieux de savoir pourquoi tu as besoin de ça? N'y a-t-il vraiment aucune autre solution?

    La plus petite taille de variable en C, c'est le type char ( 1 octet, soit 8 bits ).
    Mais via un char tu peux connaître indirectement la valeur de chaque bit.

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Utilise un uint32_t, avec opérations binaires (décalage de bits, et binaire, ou binaire...) pour accéder aux différents bits.

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Par défaut
    comment pourrai-je déclarer une variable de 4 octets comme ça j'aurais mes 32 bits?? et comment faire pour modifier la valeur des bits??

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Par défaut
    Variable de 4 octets : int.

    Quoique théoriquement c'est pas certain. Donc tu peux vérifier avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf( "%d", sizeof(int) );
    Si cela t'affiche 4, c'est bon.

    Pour modifier la valeur des bits, je ne saurais pas te donner une méthode direct, mais tu peux en trouver tout un tas indirect ( les opérateurs par exemple ).

    Explicite nous ton but, sinon je crains que cela soit dur de te renseigner mieux.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 67
    Par défaut
    Citation Envoyé par marooh Voir le message
    comment pourrai-je déclarer une variable de 4 octets comme ça j'aurais mes 32 bits?? et comment faire pour modifier la valeur des bits??
    Crée ton tableau de type "unsigned long int" qui est codée sur 32 bits.
    Ensuite, pour stocker chacuns de tes 4 octets, il faut que tu joues avec les opérateurs bits à bts, même chose pour accéder à chaque bits.

    Exemple pour accéder au 2ème octet de ta variable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    unsigned byte_index = 1;
    unsinged container = 0xFFFFFFFF;
     
    byte_index = (3 - (byte_index % 4)) << 3;
    byte_mask = ~(0x000000FF << byte_index);
    byte_value = 0xAA  << byte_index;
     
    container = (container  & byte_mask) | byte_value;
    tu remarqueras à la sortie que container sera égal à 0xFFAAFFFF

  9. #9
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    uint32_t fait toujours 32 bits. Un int ne fait pas forcément 32 bits. Un long "encore moins" sur les architectures courantes.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 67
    Par défaut
    Citation Envoyé par matafan Voir le message
    uint32_t fait toujours 32 bits. Un int ne fait pas forcément 32 bits. Un long "encore moins" sur les architectures courantes.
    tu sais comment est déclaré uin32_t??
    http://linux.die.net/man/3/uint32_t

  11. #11
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 91
    Par défaut
    Citation Envoyé par ggwtf Voir le message
    tu sais comment est déclaré uin32_t??
    http://linux.die.net/man/3/uint32_t
    Ces déclarations sont faites après vérification de la taille, si uint32_t est déclaré comme étant un alias du type unsigned long int ou autre, c'est que sur cette architecture un unsigned long int fait 32 bits.

    La seule façon portable de déclarer un entier non signé sur 32 bit est d'utiliser uint32_t. Bien que ce soit un type optionnel d'après la norme. Donc il se peut qu'il ne soit pas défini sur toutes les architectures.

    Un autre moyen plus simple/portable est de déclarer un tableau de 4 char, à condition de vérifier que la macro CHAR_BIT (définie dans limits.h) vaut 8; ainsi on est sûr qu'un char fait 8 bits. Mais dans ce cas il faut faire un traitement autre que des simples >> et << et des masques sur 32 bits; il faut traiter le tableau comme tel, et faire attention au problèmes de codage des entiers de plus d'un byte (l'endianness en l'occurrence) qui ne se posent que si on manipule les bits en dur par l'intermédiaire d'un tableau de bytes. Si un char n'est pas sur 8 bits (c'est peu probable mais sait-on jamais) alors il faut chercher un autre type, notamment uint8_t ou 16 ou 32.

  12. #12
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Par défaut
    re,
    merci pour vos reponses!!
    je suis un peu perdu là,j'utilise uint_32 ou la methode donnée par ggwtf??

  13. #13
    Membre éprouvé
    Inscrit en
    Juin 2008
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 91
    Par défaut
    Citation Envoyé par marooh Voir le message
    re,
    merci pour vos reponses!!
    je suis un peu perdu là,j'utilise uint_32 ou la methode donnée par ggwtf??
    uint32_t bien évidemment.

  14. #14
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Utilise uint32_t si ta plate-forme est le supporte (gcc le supporte, Visual Studio non).
    uint32_t est déclaré dans <stdint.h>.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #15
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Par défaut
    re,
    j'ai ecrit cela unsigned int i = 0 | (1 << 1) | (1 << 5) | (1 << 8) | (1 << 10);
    qu'est ce que je dois ajouter pour afficher le code binaire resultat??

  16. #16
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu veux dire pour afficher le nombre en notation binaire? cherche sur le forum, la question a été posée il y a moins d'un mois (c'est plus difficile qu'afficher en hexa, car ça n'est pas supporté directement par un simple printf()).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #17
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Par défaut
    euuh normalment le code que j'ai posté met les valeurs des bits 1,5,8et10 à 1 non?je veux maintenant afficher le resultat

  18. #18
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Citation Envoyé par marooh Voir le message
    euuh normalment le code que j'ai posté met les valeurs des bits 1,5,8et10 à 1 non?je veux maintenant afficher le resultat
    Ben oui, justement, Médinoc vient de te répondre à ce sujet...

  19. #19
    Membre confirmé
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Par défaut
    re,
    j'ai trouvé la fonction get_binairy mais ça n'indique pas comment l'utiliser??

  20. #20
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdint.h>
    #include <stdio.h>                                                              
     
    void                                                                            
    print_uint32(uint32_t bits)                                                     
    {                                                                               
            uint32_t mask;                                                          
            for (mask = 1<<31; mask; mask >>= 1) {                                  
                    fputc(bits & mask ? '1' : '0', stdout);                         
            }                                                                       
    }
    C'était dur, hein ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Tableau de chaînes de caractères
    Par mouradj2006 dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 13/12/2017, 10h47
  2. Probleme avec tableau de char
    Par loula427 dans le forum Débuter
    Réponses: 24
    Dernier message: 25/01/2011, 11h56
  3. Probleme avec Tableau sous Word
    Par gilles06 dans le forum VBA Word
    Réponses: 8
    Dernier message: 26/02/2008, 23h03
  4. Probleme avec tableau
    Par kika18 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/12/2007, 13h06
  5. [Tableaux] probleme avec tableau a recupere
    Par twixster dans le forum Langage
    Réponses: 14
    Dernier message: 16/02/2006, 17h50

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