Bits

Bits - C++ - Programmation

Marsh Posté le 05-01-2005 à 21:48:19    

Bonjour ! J'aimerai savoir comment l'on definie une variable sur un nombre de bit spécifique par exemple pour créer une variable de type bool sur 1 bit et non sur 1 octet. Pour ensuite pouvoir passer en paramètre d'une fonction une combinaison de constante avec l'opérateur '|'.
Merci

Reply

Marsh Posté le 05-01-2005 à 21:48:19   

Reply

Marsh Posté le 05-01-2005 à 22:01:57    

J'ai vu que l'on pouvait le faire mais je ne sais plus comment !? kelkun pourrait m'aider svp ?

Reply

Marsh Posté le 05-01-2005 à 22:13:05    

bof, la feinte habituelle, c'est le coup de l'enum :
 

Code :
  1. enum roger {
  2. COLONEL_MOUTARDE = 1,
  3. SALON = 2,
  4. CHANDELIER = 4
  5. };
  6. mafonction(COLONEL_MOUTARDE | SALON | CHANDELIER);


 
 
 
 
 

Reply

Marsh Posté le 06-01-2005 à 00:01:11    

La plus petite unité adressable c'est l'octet, donc tu ne peux pas créer une seule variable inférieure à cette taille. Tu peux grouper plusieurs bool dans un même octet...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 06-01-2005 à 00:21:29    

HelloWorld a écrit :

La plus petite unité adressable c'est l'char, donc tu ne peux pas créer une seule variable inférieure à cette taille. Tu peux grouper plusieurs booléens dans un même octet grâce aux champs de bits


Reply

Marsh Posté le 06-01-2005 à 09:44:25    

Moi je me situais d'un point de vue archi x86.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 06-01-2005 à 10:24:21    

la taille mini c'est l'octet mais tu peux declarer un champ de Bits dans cet octet. d'ailleur generalement (enfin pour la gestion d'un registre par exemple), on declare les champs de bits dans une union pour acceder soit aux bits, soit à l'octet complet.

Code :
  1. typedef struct ChampDeBits
  2. {
  3.    char Bit0 : 1;  // Bit0 déclaré sur 1 bits
  4.    char Toto : 3;  // Toto déclaré sur 3 bits
  5.    // etc
  6. };


---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 06-01-2005 à 16:17:15    

Merci les gens ! =)
Parcontre un truc que je n'est jamais compris :
A quoi sert le typedef devant une structure ?

Reply

Marsh Posté le 06-01-2005 à 16:21:07    

En C++ à rien, en C à éviter de mettre struct tout le temps (sauf que là il s'est trompé c'est à la fin le nom du typedef).


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 06-01-2005 à 16:25:21    

Merci c'est bien ce que je me disais ! ^^
Moi je dis quel interet de garder le language C
puisque le C++ existe et que celui-ci est plus élaboré
Je sais que ces 2 language son different mais pas tant que ça

Reply

Marsh Posté le 06-01-2005 à 16:25:21   

Reply

Marsh Posté le 06-01-2005 à 16:29:32    

Le mot 'union' permet de créer des champs de bits mais ceux-ci sont il stocké sur 1 octet ? Et pourquoi peut-on seulement se servir de un seul champs ?

Reply

Marsh Posté le 06-01-2005 à 16:30:24    

union n'a rien a voir avec toussa

Reply

Marsh Posté le 06-01-2005 à 16:31:10    

HelloWorld a écrit :

En C++ à rien


 
Même pas pour créer un nouveau type ?  
typedef std::vector<int> IntVector;
comment on fait ça sans typedef ?
(à moins que ton "à rien" ne concerne que les structures ?)


Message édité par antp le 06-01-2005 à 16:31:34

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 06-01-2005 à 16:31:52    

antp a écrit :

Même pas pour créer un nouveau type ?  
typedef std::vector<int> IntVector;
comment on fait ça sans typedef ?
(à moins que ton "à rien" ne concerne que les structures ?)


 
 
LISEZ LA QUESTION §§§§


#################################################
# A quoi sert le typedef devant une structure ? #
#################################################


Message édité par chrisbk le 06-01-2005 à 16:32:10
Reply

Marsh Posté le 06-01-2005 à 16:33:30    

il parlait d'un typedef devant un struct!!!


Message édité par Rits75 le 06-01-2005 à 16:33:54
Reply

Marsh Posté le 06-01-2005 à 16:34:10    

HelloWorld a écrit :

En C++ à rien, en C à éviter de mettre struct tout le temps (sauf que là il s'est trompé c'est à la fin le nom du typedef).


les 2 ecritures sont equivalentes non?
sauf que mettre le nom en premier te permet de declarer une variable de ce type directement.  
enfin je crois... ou alors j'utilise des compilos tres genereux (ce qui serait pas supprenant outre mesure...)
 
 


---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 06-01-2005 à 16:35:13    

je parle pu du typedef la ! o_O
=(

Reply

Marsh Posté le 06-01-2005 à 16:37:14    

je parle de union et de ces champs de bits dans quel cas il sert et pk un acces limiter sur les champs (utilisation d'un seul champ a la fois qui engeandre la destruction des autre champs)

Reply

Marsh Posté le 06-01-2005 à 16:37:20    

Z3RgSp4wN a écrit :

Le mot 'union' permet de créer des champs de bits mais ceux-ci sont il stocké sur 1 octet ? Et pourquoi peut-on seulement se servir de un seul champs ?


non ce n'est pas l'union qui te permet de creer un champ de bit mais une structure.
l'union entre cette structure et un byte, peut te permettre de gerer soit bit par bit, soit l'octet complet (d'ou son utilisation pour les registres: tu lis un flag du registre mais tu reset le registre complet)


---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 06-01-2005 à 17:17:30    

Rits75 a écrit :

il parlait d'un typedef devant un struct!!!


 
oui bon après coup j'ai édité :o
 

chrisbk a écrit :

LISEZ LA QUESTION §§§§


 
lisez l'edit :o


Message édité par antp le 06-01-2005 à 17:17:40

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 06-01-2005 à 17:30:59    

antp a écrit :

lisez l'edit :o


Citation :

Champion des excuses bidons


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 06-01-2005 à 17:38:40    

antp a écrit :


lisez l'edit :o


 
 
trop fort l'edit :o


(à moins que ton "à rien" ne concerne que les structures ?)


 
bin la réponse est la meme : LISEZ LA QUESTION §§§

Reply

Marsh Posté le 06-01-2005 à 17:59:18    

chrisbk a écrit :

trop fort l'edit :o


 
cf message de HelloWorld [:spamafote]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 06-01-2005 à 18:00:36    

Argh ça sort du contexte !

Reply

Marsh Posté le 06-01-2005 à 18:02:24    

Z3RgSp4wN a écrit :

je parle de union et de ces champs de bits dans quel cas il sert et pk un acces limiter sur les champs (utilisation d'un seul champ a la fois qui engeandre la destruction des autre champs)


je suis pas sure de comprendre ce que tu veux dire... en particulier la parenthese...
 
sur un processeur classique, style x86, l'allocation minimum est un octet (tu dois pouvoir trouver des proc qui gere des bits mais plutot coté DSP ou FPGA).
ça ne signifie pas qu'un champ de bits a une taille maximum de 1 octet. il a la taille que tu souhaites.
le champ de bits n'est qu'une ecriture facilitant l'acces à un ou plusieurs bits d'un espace memoire.
 
exemple d'une date codée sur 4 octets:

Code :
  1. typedef struct sCalendar
  2. {
  3.  unsigned char minute : 6;
  4.  unsigned char hour : 5;
  5.  unsigned char date : 5;
  6.  unsigned char month : 4;
  7.  unsigned char year : 8;
  8.  unsigned char dayofweek : 4;
  9. };
  10. typedef union uHorloge_Bdd
  11. {
  12.  unsigned long Bdd_Format;
  13.  sCalendar  BitField;
  14. };


 
utilisation de cette date:

Code :
  1. uHorloge_Bdd  time;
  2. printf("Valeur de la Date en memoire:%ld\n", time.Bdd_Format);
  3. printf("Valeur de l'année:%d\n", time.BitField.year);


 
 


---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 06-01-2005 à 18:09:27    

Quest ce que ça fait si on affecte un nb tro grand par ex à minute : 6;
?  
Merci de t explication yulara  

Reply

Marsh Posté le 06-01-2005 à 18:12:10    

hum bonne question...
je dirais que comme tu déclares minute en char, l'overflow doit etre 256 et non 64... donc il ecraserait bien les 2 premiers bits de hour...
mais pas sure, j'ai jamais été confrontée à ce cas...


Message édité par yulara le 06-01-2005 à 18:12:32

---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 06-01-2005 à 18:19:35    

Ouai bref si on programme bien son programme il ne doit pas y avoir de pb d'overflow. Merci

Reply

Marsh Posté le 06-01-2005 à 18:22:31    

ah bah j'ai tout faux (mais bon vu que ça arrive souvent, c'est pas surprenant :p)
 
minute aura bien un overflow de 64.
cf http://www.ann.jussieu.fr/courscpp [...] 06-G1.html


---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 06-01-2005 à 18:26:18    

^^ ta ptetre tjrs faut mais moi je ne sais jamais rien !
Merci pour le lien

Reply

Marsh Posté le 06-01-2005 à 19:00:42    

je me suis toujours demandé si mon compilateur avait légalement le droit de me tacler à la gorge lorsque je fais
 
mon_union.ici = truc;
machin = mon_union.la;
 
je pense que oui, faudrait que je sorte mon bouquin

Reply

Marsh Posté le 06-01-2005 à 19:11:43    

oui, ton compilateur regarde s'il existe une instance d'eric Di méco ou de William Prunier, et appelle le plus proche pour un tacle à la bolognaise les 2 pieds décollés ! :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed