Partage
  • Partager sur Facebook
  • Partager sur Twitter

creation strcuture bit

    3 novembre 2022 à 11:33:07

    je bloque , le but est de créer une structure qui devra s’appuyer sur un tableau d’entiers 8 bits dont chaque bit représentera un booléen.

    typedef struct tab_bit bit;
    struct tab bit{
        // tableau de booléens.
        // chaque booléen est stocké sur un bit.
    };



    -
    Edité par LA Joya 3 novembre 2022 à 17:09:10

    • Partager sur Facebook
    • Partager sur Twitter
      3 novembre 2022 à 11:37:49

      La question est ambigue.

      Si on prend le mot "tableau" dans son sens C, il est impossible de déclarer un   T tableau[8], où T n'occupe qu'un bit.

      Les exercices étant généralement donnés pour faire pratiquer une partie du cours, il faudrait savoir à quoi il peut se rapporter : masquage/décalage de bits, "bit fields", etc.

      Ah oui, c'est vrai, il faut (re)lire le cours.

      -
      Edité par michelbillaud 3 novembre 2022 à 11:39:54

      • Partager sur Facebook
      • Partager sur Twitter
        3 novembre 2022 à 12:25:58

        La seul information qu'on a eu

        -
        Edité par LA Joya 3 novembre 2022 à 17:08:27

        • Partager sur Facebook
        • Partager sur Twitter
          3 novembre 2022 à 13:09:16

          Un booléen c'est 1 octet donc 8 booléens dans un tableau ça fait 8 octets non ?

          #include <stdlib.h>
          #include <stdbool.h>
          
          int main(void)
          {
          typedef struct tab_bit bit;
          struct bit
          {
              bool boleens[8];
          };
          
          struct bit boleen;
          
              printf("%d octets \n", sizeof(bool));
              printf("%d octets \n", sizeof(boleen));
          
              return 0;
          }
          • Partager sur Facebook
          • Partager sur Twitter
            3 novembre 2022 à 14:09:00

            Que veut dire:
            >     // chaque booléen est stocké sur un unique bit.
            "unique bit"

            Est-ce qu'on parle de bit field
            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

              3 novembre 2022 à 14:48:10

              Les bit fields ne sont pas manipulables comme des tableaux (avec des indices), ca donne des membres indépendants.

              Ça penche vers le tableau d'octets, avec le k ieme bit qui correspond au masque  1 << (k % 8)  appliqué à l'octet d'indice k/8.

              -
              Edité par michelbillaud 3 novembre 2022 à 14:50:17

              • Partager sur Facebook
              • Partager sur Twitter
                3 novembre 2022 à 14:52:20

                et comment crée cette structure ?

                • Partager sur Facebook
                • Partager sur Twitter
                  3 novembre 2022 à 15:05:58

                  LA Joya a écrit:

                  et comment crée cette structure ?


                  Une idée :

                  struct BitArray
                  {
                    char* tab;
                    int nbbits;  // voir reserve
                  }

                  Tu as besoin de stocker nbbits, donc tu malloc (nbbits/8+1) char

                  Puis tu as une fonction qui écrit un bit :

                  Ensuite, quand tu veux lire/écrire le bit ith,  tu calcules :

                  int pos = ith/8;    et tu iras chercher tab[pos];

                  int offset = ith%8;   

                  Et ensuite tu fabriques un masque avec l'offset :

                  char mask = 1<<offset;

                  puis en fonction de set ou reset un bit, tu utilises les opérateurs binaires &|^ avec le masque.

                  J'ai mis la reserve entre parenthèse, car si tu considères une fonction push, elle fera un réalloc si tu es déjà au bout, (voir concept du vector)

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                    3 novembre 2022 à 19:44:18

                    Hello,

                    Peut-être quelque chose du style

                    #include <stdio.h>
                    
                    struct bits {
                    	unsigned int b7:1;
                    	unsigned int b6:1;
                    	unsigned int b5:1;
                    	unsigned int b4:1;
                    	unsigned int b3:1;
                    	unsigned int b2:1;
                    	unsigned int b1:1;
                    	unsigned int b0:1;
                    };
                    
                    union thingly {
                    	unsigned char c;
                    	struct bits b;
                    };
                    
                    int main(void) {
                    	union thingly t;
                    	
                    	t.c='A';
                    	printf("%u",t.b.b0);
                    	printf("%u",t.b.b1);
                    	printf("%u",t.b.b2);
                    	printf("%u",t.b.b3);
                    	printf("%u",t.b.b4);
                    	printf("%u",t.b.b5);
                    	printf("%u",t.b.b6);
                    	printf("%u",t.b.b7);
                    
                    	return(0);
                    }

                    -
                    Edité par edgarjacobs 3 novembre 2022 à 19:47:16

                    • Partager sur Facebook
                    • Partager sur Twitter

                    On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                      3 novembre 2022 à 20:45:46

                      S kO a écrit:

                      Un booléen c'est 1 octet donc 8 booléens dans un tableau ça fait 8 octets non ?

                      Tu parles des booléens de <stdbool.h>, mais il me semble qu'ici c'est à LA Joya de créer lui même ses propres booléens, et effectivement avec 8 bits on aura 8 booléens. Mais ils seront rangés dans un octet, pas dans un tableau. J'ai peur que LA Joya ait mal compris l'énoncé. (Et je crois qu'edgarjocobs l'a mieux compris...)

                      -
                      Edité par robun 3 novembre 2022 à 20:47:58

                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 novembre 2022 à 8:09:19

                        Moi, je comprends l'énoncé comme:
                        struct bit {
                            // tableau de booléens.
                            // chaque booléen est stocké sur un bit.
                            unsigned char tab[8];
                        };
                        qui contiendrait 8x8 bits. L'accès au i-ème bit pouvant être : (data.tab[i>>3] >> (i&7)) & 1
                        • Partager sur Facebook
                        • Partager sur Twitter

                        En recherche d'emploi.

                        creation strcuture bit

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown