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 :

la declaration des bits field


Sujet :

C

  1. #1
    Inactif
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Points : 44
    Points
    44
    Par défaut la declaration des bits field
    bonjours,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct bit_field{
    unsigned char element1            :4;
    unsigned char element2            :4;
    };
    est ce je suis entrain d'utiliser le meme octet en memoire ou je suis entrain de declarer de octet memoire??
    c.a.d est ce que je suis entrain de gagner de l'espace memoire???


    merci d'avance!!!

  2. #2
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Chaque char va occupé un octet. Donc ici tu occuperas deux octets...


    ps : c'est pas le bon endroit pour poster, y'a pas d'utilisation de la SL dans ton code.
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  3. #3
    Inactif
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Points : 44
    Points
    44
    Par défaut
    donc si je comprend bien je ne gagne rien de point de vue ocuppation de la memoire et donc les bits fields n'ajoute rien???

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Chaque char va occupé un octet. Donc ici tu occuperas deux octets...
    Pas du tout.
    Les champs de bits sont compactés. Par contre l'ordre (du lsb vers le msb ou l'inverse) des champs de bits dépend de l'implémentation
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Inactif
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Points : 44
    Points
    44
    Par défaut
    et bah voilà la solution !
    j'ai affiché le sizeof() de la structure j'ai trouvé que c'est 1 octet et donc la taille de la structure est un octet!
    les bits fields c'est bien!

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par jeanjack Voir le message
    les bits fields c'est bien!
    Oui, mais attention, ce n'est pas portable
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  7. #7
    Inactif
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Points : 44
    Points
    44
    Par défaut
    tu veux dire quoi avec ce n'est pas portable??
    n'est ce pas du standard????

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par jeanjack Voir le message
    n'est ce pas du standard????
    Si c'est standard et tous les compilateurs C savent le faire par contre, l'implémentation qu'il y a derrière (sous le capot) n'est pas portable.

    Certains compilateurs peuvent utiliser un octet pour y ranger 1 bit et d'autres utiliser un octet pour y ranger 8 bits (je sais je pousse un peu le trait mais c'est l'idée)
    Certains pourrait dire le bit de poid faible, c'est le bit 0 et d'autres dire que c'est le bit 7 qui est le bit de poids faible.

    Donc tout les compilateurs savent donc gérer des champs de bits mais ils ne le font pas tous de la même manière (parce que la norme ne l'impose pas)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Inactif
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Points : 44
    Points
    44
    Par défaut
    ah!! j'ai compris de quoi tu parle!!
    tu veux dire que je dois tenir compte du et faire appel à la bbliothèque endian si c'est cela le problème, j'ai tenu compte dès le début sinon explique moi encore. merci

  10. #10
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Le byte order est peut être une partie du problème mais le problème principal est que la norme ne dit pas comment implémenter la notion de bit field. A partir de ce moment là, les compilateurs font ce qu'il veulent et donc ce n'est pas portable.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  11. #11
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    La norme ne précise pas nom plus comment doit être implémenter les autres types (int, float, ...).

    Bref, les bits fields, comme les autres types, ce n'est pas portable de les utiliser de façon non portable

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Et comme, sur des machines avec assez de mémoire, l'utilisation non-portable est la seule utilisation des bitfields qui vienne à l'esprit, le manque de normalisation dépouille les bitfields de toute utilité.

    Donc, dès que tu veux un minimum de portabilité, les bitfields ne servent à rien.

    À moins que: Il est possible que l'agencement des bitfields soit normalisé sous POSIX. Je n'en ai aucune idée, mais ça les rendrait utiles sur tout système compatible POSIX...
    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.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/04/2006, 23h11
  2. ordre de declarations des variables
    Par Hypnocrate dans le forum C
    Réponses: 13
    Dernier message: 09/12/2005, 15h43
  3. concatener des bits
    Par philippe V dans le forum C++
    Réponses: 16
    Dernier message: 23/08/2005, 02h26
  4. Travailler avec des bits
    Par Vulvulune dans le forum Langage
    Réponses: 5
    Dernier message: 02/03/2003, 20h09
  5. Question : ordre des bits ?
    Par Choupi dans le forum C
    Réponses: 3
    Dernier message: 11/02/2003, 07h22

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