bonjour,je veux créer un tableau de bits de taille maximale égale à 32 .comment faire exactement??![]()
bonjour,je veux créer un tableau de bits de taille maximale égale à 32 .comment faire exactement??![]()
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.
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
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.
Utilise un uint32_t, avec opérations binaires (décalage de bits, et binaire, ou binaire...) pour accéder aux différents bits.
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??
Variable de 4 octets : int.
Quoique théoriquement c'est pas certain. Donc tu peux vérifier avec :
Si cela t'affiche 4, c'est bon.
Code : Sélectionner tout - Visualiser dans une fenêtre à part printf( "%d", sizeof(int) );
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.
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:
tu remarqueras à la sortie que container sera égal à 0xFFAAFFFF
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;
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
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.
re,
merci pour vos reponses!!
je suis un peu perdu là,j'utilise uint_32 ou la methode donnée par ggwtf??
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.
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??
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.
euuh normalment le code que j'ai posté met les valeurs des bits 1,5,8et10 à 1 non?je veux maintenant afficher le resultat
re,
j'ai trouvé la fonction get_binairy mais ça n'indique pas comment l'utiliser??![]()
C'était dur, hein ?
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); } }
Partager