 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Olivier Guest
|
Posted: Tue Mar 15, 2005 6:22 pm Post subject: PB débutant |
|
|
Bonjour,
J'ai un petit probleme de comprehension de déclaration de variable dans un
programme en Visual C++.
DWORD dwNameLen : 6
que signifie ": 6" ????
Cordialement,
Olivier
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Tue Mar 15, 2005 6:31 pm Post subject: Re: PB débutant |
|
|
On Tue, 15 Mar 2005 19:22:41 +0100, "Olivier" <ope (AT) club-internet (DOT) fr>:
| Quote: | J'ai un petit probleme de comprehension de déclaration de variable dans un
programme en Visual C++.
DWORD dwNameLen : 6
|
Logiquement, il s'agit d'un membre d'une classe. Le ":6" indique que
le membre en question n'occupe que 6 bits.
Exemple :
struct Machin
{
unsigned long x: 7;
unsigned long y: 8;
unsigned long z: 17;
};
Un "Machin" fait 32 bits en tout, bien qu'il ait 3 éléments.
Note que tout ça est hautement non portable (et un peu passé de mode
il me semble). Par conséquent, mieux vaut savoir le lire mais ne
jamais avoir à l'écrire.
--
;-)
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Tue Mar 15, 2005 7:12 pm Post subject: Re: PB débutant |
|
|
Fabien LE LEZ wrote:
| Quote: | On Tue, 15 Mar 2005 19:22:41 +0100, "Olivier" <ope (AT) club-internet (DOT) fr>:
J'ai un petit probleme de comprehension de déclaration de
variable dans un programme en Visual C++.
DWORD dwNameLen : 6
Logiquement, il s'agit d'un membre d'une classe. Le ":6"
indique que le membre en question n'occupe que 6 bits.
Exemple :
struct Machin
{
unsigned long x: 7;
unsigned long y: 8;
unsigned long z: 17;
};
Un "Machin" fait 32 bits en tout, bien qu'il ait 3 éléments.
|
La taille d'un "Machin" dépend toujours sur l'implémentation.
Disons qu'il ferait au moins 32 bits, et prèsque certainement
moins que s'il n'y avait pas des derrière.
| Quote: | Note que tout ça est hautement non portable (et un peu passé
de mode il me semble).
|
Qu'est-ce qui te fait dire ça ? Quand j'ai commencé le C, on les
évitait, en effet, parce que certains compilateurs en avaient
des problèmes. Mais c'était 1983, environ. Depuis, c'est à
espérer qu'ils ont résolu ces problèmes.
En revanche, c'est effectivement un peu tombé de mode, du fait
que c'est une optimization de l'espace, et les mémoires sont
devenues nettement plus grandes qu'avant. N'empèche que si
j'avais des millions d'enrégistrements, et que chaque
enrégistrement avait beaucoup de champs avec 2 ou 3 valeurs, je
m'en servirai, encore aujourd'hui.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
Olivier Guest
|
Posted: Wed Mar 16, 2005 7:59 pm Post subject: Re: PB débutant |
|
|
Merci pour vos réponses...
Donc si j'ai bien compris,
struct Machin
{
DWORD Truc : 6, Chose : 26;
};
Signifie que la structure Machin à une taille de DWORD, 4 octets, soit 32
bits et qu'elle est composée de Truc qui fait 6 bits et Chose qui en fait 26
!!??
Par contre une autre question, Truc = 6 premiers bits, 6 derniers ou au
hasard dans les 32 bits ?
Désolé, je débute...
Cordialement,
Olivier
<kanze (AT) gabi-soft (DOT) fr> a écrit dans le message de
news:1110913956.932193.186140 (AT) o13g2000cwo (DOT) googlegroups.com...
Fabien LE LEZ wrote:
| Quote: | On Tue, 15 Mar 2005 19:22:41 +0100, "Olivier" <ope (AT) club-internet (DOT) fr>:
J'ai un petit probleme de comprehension de déclaration de
variable dans un programme en Visual C++.
DWORD dwNameLen : 6
Logiquement, il s'agit d'un membre d'une classe. Le ":6"
indique que le membre en question n'occupe que 6 bits.
Exemple :
struct Machin
{
unsigned long x: 7;
unsigned long y: 8;
unsigned long z: 17;
};
Un "Machin" fait 32 bits en tout, bien qu'il ait 3 éléments.
|
La taille d'un "Machin" dépend toujours sur l'implémentation.
Disons qu'il ferait au moins 32 bits, et prèsque certainement
moins que s'il n'y avait pas des derrière.
| Quote: | Note que tout ça est hautement non portable (et un peu passé
de mode il me semble).
|
Qu'est-ce qui te fait dire ça ? Quand j'ai commencé le C, on les
évitait, en effet, parce que certains compilateurs en avaient
des problèmes. Mais c'était 1983, environ. Depuis, c'est à
espérer qu'ils ont résolu ces problèmes.
En revanche, c'est effectivement un peu tombé de mode, du fait
que c'est une optimization de l'espace, et les mémoires sont
devenues nettement plus grandes qu'avant. N'empèche que si
j'avais des millions d'enrégistrements, et que chaque
enrégistrement avait beaucoup de champs avec 2 ou 3 valeurs, je
m'en servirai, encore aujourd'hui.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
Michel Michaud Guest
|
Posted: Wed Mar 16, 2005 8:04 pm Post subject: Re: PB débutant |
|
|
Dans le message 42388f8b$0$15287$7a628cd7 (AT) news (DOT) club-internet.fr,
Olivier <ope (AT) club-internet (DOT) fr> a écrit :
| Quote: | Merci pour vos réponses...
Donc si j'ai bien compris,
struct Machin
{
DWORD Truc : 6, Chose : 26;
};
Signifie que la structure Machin à une taille de DWORD, 4 octets,
soit 32 bits et qu'elle est composée de Truc qui fait 6 bits et
Chose qui en fait 26 !!??
|
Non. Seulement que Truc aura au moins 6 bits utilisables et Chose
en aura au moins 24. Au total, tu ne peux pas compter sur la taille
sans te fier à la documentation de ton compilateur spécifique (et
souvent selon ses options).
| Quote: | Par contre une autre question, Truc = 6 premiers bits, 6 derniers
ou au hasard dans les 32 bits ?
|
Non défini par ISO C++. Voir la documentation de ton compilateur
si c'est important.
| Quote: | Désolé, je débute...
|
Alors ce n'est vraiment pas le genre de choses qui devrait t'être
utile dans tes programmes...
--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
tibug Guest
|
Posted: Sat Mar 19, 2005 1:00 am Post subject: Re: PB débutant |
|
|
Michel Michaud a écrit :
| Quote: | Dans le message 42388f8b$0$15287$7a628cd7 (AT) news (DOT) club-internet.fr,
Olivier <ope (AT) club-internet (DOT) fr> a écrit :
Alors ce n'est vraiment pas le genre de choses qui devrait t'être
utile dans tes programmes...
|
beh je débute aussi et je me tracasse aussi quand je tombe sur un truc
que je ne comprend pas (à peu près tout ;-)
En particulier pour les types, ça peut dérouter un débutant d'apprendre
qu'un 'int' n'ait pas la même capacité sur telle ou telle machine, et de
devoir jeter un oeil à limits.h pour définir un uint32 portable :)
[soyez indulgent si vous voyez des immondités dans les commentaires
ci-dessous (i.e. pas sur la tête ;-)
struct Machin
{
Chose : 26; // tout ce qu'on veut, c'est que le type 'Chose' puisse
// *au moins* contenir 26 bits, on choisit pour 'Chose' le
}; // type plus petit (>= 26)
Définir ainsi explicitement la "pseudo" taille des membre en bits
peut être utile pour des opérations sur des champs de bits.
Ci-desous un exemple de ce type de structure (tiré de id3lib)
pour réaliser une "copie de buffer sur structure" à l'aide de
l'opérateur 'reinterpret_cast' :
[il s'agit de lire les 32 bits de l'entête d'une frame mp3 et de
renseigner les membres d'une structure suivant la valeur des bits lus :
-- /id3lib-stable/src/mp3_header.h ----
// on définit un type de de structure pour une entête mp3 de 32 bits :
// http://www.mp3-tech.org/programmer/frame_header.html
struct _mp3_header_internal {
// on définit les membres (dans l'ordre!), en utilisant des
// unsigned char parceque l'on a pas besoin plus de 8 bits :
//byte 1
unsigned char frame_sync_a : 8; /* all bits should be set */
//byte 2
unsigned char protection_bit : 1;
unsigned char layer : 2;
unsigned char id : 2;
unsigned char frame_sync_b : 3; /* all bits should be set */
//byte 3
unsigned char private_bit : 1;
unsigned char padding_bit : 1;
unsigned char frequency : 2;
unsigned char bitrate_index : 4;
//byte 4
unsigned char emphasis : 2;
unsigned char original : 1;
unsigned char copyright : 1;
unsigned char mode_ext : 2; /* only used in joint stereo */
unsigned char mode : 2;
};
-- /id3lib-stable/src/mp3_parse.cpp ---
_mp3_header_internal *_tmpheader; // une struct pour header
const size_t HEADERSIZE = 4; // 4 o = "pseudo" taille de la struct
char buf[HEADERSIZE+1]; // buffer pour l'entête lue dans mp3
//+1 to hold the char
....
reader.readChars(buf, HEADERSIZE); // remplit le buffer à partir
buf[HEADERSIZE]=' '; // de 32 bits lu dans le fichier
....
// copie le buffer sur la structure en fixant la valeur
// des membre de _tmpheader à leurs homologues dans le buffer :
_tmpheader = reinterpret_cast<_mp3_header_internal *>(buf);
....
voilà, A+
tibug
|
|
| Back to top |
|
 |
James Kanze Guest
|
Posted: Sat Mar 19, 2005 4:32 pm Post subject: Re: PB débutant |
|
|
Michel Michaud wrote:
| Quote: | Dans le message 42388f8b$0$15287$7a628cd7 (AT) news (DOT) club-internet.fr,
Olivier <ope (AT) club-internet (DOT) fr> a écrit :
Merci pour vos réponses...
Donc si j'ai bien compris,
struct Machin
{
DWORD Truc : 6, Chose : 26;
};
Signifie que la structure Machin à une taille de DWORD, 4
octets, soit 32 bits et qu'elle est composée de Truc qui fait
6 bits et Chose qui en fait 26 !!??
Non. Seulement que Truc aura au moins 6 bits utilisables et
Chose en aura au moins 24.
|
Non. Il est garanti que Truc a exactement 6 bits, et Chose 26.
Dans la mésure que les types sont signés, évidemment, c'est
difficile pour un programme conforme de le savoir, mais s'il
sont unsigned, si Truc vaut 63, ++ Truc vaut 0. Garanti par la
norme.
Il n'y aucune garantie en ce concerne la taille de
Machin, mais l'intention est clairement précisée que si la
taille d'un DWORD est 32 bits ou plus, que et Truc et Chose se
trouvent dans le même DWORD.
| Quote: | Au total, tu ne peux pas compter sur la taille sans te fier à
la documentation de ton compilateur spécifique (et souvent
selon ses options).
Par contre une autre question, Truc = 6 premiers bits, 6
derniers ou au hasard dans les 32 bits ?
Non défini par ISO C++. Voir la documentation de ton
compilateur si c'est important.
|
Si c'est important, les bit field ne sont probablement pas
l'outil qui convient. Ça peut varier d'un compilateur à l'autre,
même sur le même système.
| Quote: | Désolé, je débute...
Alors ce n'est vraiment pas le genre de choses qui devrait
t'être utile dans tes programmes...
|
Il n'a pas dit qu'il voulait s'en servir ; il a vu qu'il l'a vu,
et qu'il voulait comprendre ce qu'il a vu.
--
James Kanze home: www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
Michel Michaud Guest
|
Posted: Sat Mar 19, 2005 7:34 pm Post subject: Re: PB débutant |
|
|
Dans le message 423c53f1$0$21961$626a14ce (AT) news (DOT) free.fr,
James Kanze <kanze@none> a écrit :
| Quote: | Michel Michaud wrote:
Dans le message 42388f8b$0$15287$7a628cd7 (AT) news (DOT) club-internet.fr,
Olivier <ope (AT) club-internet (DOT) fr> a écrit :
Merci pour vos réponses...
Donc si j'ai bien compris,
struct Machin
{
DWORD Truc : 6, Chose : 26;
};
Signifie que la structure Machin à une taille de DWORD, 4
octets, soit 32 bits et qu'elle est composée de Truc qui fait
6 bits et Chose qui en fait 26 !!??
Non. Seulement que Truc aura au moins 6 bits utilisables et
Chose en aura au moins 24.
Non. Il est garanti que Truc a exactement 6 bits, et Chose 26.
|
Je ne suis pas certain que c'est ce que dit la norme (je viens
de relire la norme C, ça ne me semble pas aussi clair). Je sais
évidemment que c'est l'intention.
Je comprends surtout que ma phrase ne semble pas dire exactement
à quoi je pensais (et qui reste peut-être faux...). Je voulais dire
que le compilateur allouera au moins 6 bits pour que Truc ait bien
ses 6 bits utilisables, etc.
| Quote: | Dans la mésure que les types sont signés, évidemment, c'est
difficile pour un programme conforme de le savoir, mais s'il
sont unsigned, si Truc vaut 63, ++ Truc vaut 0. Garanti par la
norme.
|
Oui, je suis parfaitement d'accord. Mais il me semble possible que
les 6 bits de Truc ne soit ni complètement à gauche ni complètement
à droite de l'espace alloué. C'est là que je ne suis pas capable de
confirmer en lisant la norme... Dans mon esprit, si j'ai besoin de
manipuler 6 bits dans quelque chose, je vais le faire avec des
décalages et des masques, car je suis sous l'impression que les
champs de bits ne me garantissent rien. Peut-être que je me trompe,
c'est une vieille idée que j'ai en tête (et comme je ne fais plus
beaucoup de manipulations de bits, elle ne m'a jamais vraiment
dérangée :-)
| Quote: | Il n'y aucune garantie en ce concerne la taille de
Machin, mais l'intention est clairement précisée que si la
taille d'un DWORD est 32 bits ou plus, que et Truc et Chose se
trouvent dans le même DWORD.
|
Oui, on est d'accord sur l'intention. Par contre, sur une machine
bizarre, je crois que le compilateur pourrait allouer beaucoup
plus, par exemple deux mots de 32 bits. Encore une fois, je ne suis
pas capable de confirmer/infirmer en lisant la norme.
[...]
| Quote: | Désolé, je débute...
Alors ce n'est vraiment pas le genre de choses qui devrait
t'être utile dans tes programmes...
Il n'a pas dit qu'il voulait s'en servir ; il a vu qu'il l'a vu,
et qu'il voulait comprendre ce qu'il a vu.
|
Je n'ai pas dit qu'il n'a pas à le savoir si ça l'intéresse.
D'ailleurs, tu remarqueras que je répondais à sa question ! Je lui
dis simplement que ce n'est pas très utile pour les programmes
faits par un débutant. C'est important de comprendre qu'il ne faut
pas paniquer si on trouve ça bien bizarre ou complexe, ou qu'on
n'en voit pas l'utilité :-)
--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
Michel Michaud Guest
|
Posted: Sat Mar 19, 2005 7:47 pm Post subject: Re: PB débutant |
|
|
Dans le message 423b79bf$0$25041$8fcfb975 (AT) news (DOT) wanadoo.fr,
tibug <tibug29_AROBASE_yahoo_fr> a écrit :
| Quote: | Michel Michaud a écrit :
Alors ce n'est vraiment pas le genre de choses qui devrait t'être
utile dans tes programmes...
beh je débute aussi et je me tracasse aussi quand je tombe sur un
truc que je ne comprend pas (à peu près tout ;-)
En particulier pour les types, ça peut dérouter un débutant
d'apprendre qu'un 'int' n'ait pas la même capacité sur telle ou
telle machine, et de devoir jeter un oeil à limits.h pour définir
un uint32 portable
|
Je ne suis pas certain que c'est le genre de trucs qui devrait
préoccuper les débutants : le plus important est souvent de savoir
que int a au moins 16 bits et long au moins 32. Par ailleurs, il
est bon de savoir qu'on peut définir un type uint32 portable si
on en a vraiment besoin...
(Pour le reste, il faut simplement savoir que les champs de bits
peuvent probablement simplifier les programmes qui manipulent des
bits, au détriment de faire un programme vraiment portable.)
--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sat Mar 19, 2005 11:02 pm Post subject: Re: PB débutant |
|
|
On Sat, 19 Mar 2005 14:34:16 -0500, "Michel Michaud" <mm (AT) gdzid (DOT) com>:
| Quote: | car je suis sous l'impression que les
champs de bits ne me garantissent rien.
|
C'est bien ce qu'il m'avait semblé également : les champs de bits
peuvent servir à économiser la mémoire, mais en aucun cas à bricoler
des bits d'une variable.
| Quote: | Il n'y aucune garantie en ce concerne la taille de
Machin, mais l'intention est clairement précisée que si la
taille d'un DWORD est 32 bits ou plus, que et Truc et Chose se
trouvent dans le même DWORD.
Oui, on est d'accord sur l'intention. Par contre, sur une machine
bizarre, je crois que le compilateur pourrait allouer beaucoup
plus, par exemple deux mots de 32 bits.
|
Il me semble qu'un compilo pourrait décider (éventuellement via une
option de compilation) qu'en fait, allouer un DWORD par variable
permettrait au programme d'aller plus vite (en alig
| Quote: | struct Machin
{
DWORD Truc : 6, Chose : 26;
};
|
--
;-)
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sat Mar 19, 2005 11:03 pm Post subject: Re: PB débutant |
|
|
On Sat, 19 Mar 2005 14:34:16 -0500, "Michel Michaud" <mm (AT) gdzid (DOT) com>:
| Quote: | car je suis sous l'impression que les
champs de bits ne me garantissent rien.
|
C'est bien ce qu'il m'avait semblé également : les champs de bits
peuvent servir à économiser la mémoire, mais en aucun cas à bricoler
des bits d'une variable.
| Quote: | Il n'y aucune garantie en ce concerne la taille de
Machin, mais l'intention est clairement précisée que si la
taille d'un DWORD est 32 bits ou plus, que et Truc et Chose se
trouvent dans le même DWORD.
Oui, on est d'accord sur l'intention. Par contre, sur une machine
bizarre, je crois que le compilateur pourrait allouer beaucoup
plus, par exemple deux mots de 32 bits.
|
Il me semble qu'un compilo pourrait décider (éventuellement via une
option de compilation) qu'en fait, allouer un DWORD par variable
permettrait au programme d'aller plus vite (en alignant "Chose" sur un
DWORD). Mais je ne sais pas si un tel comportement serait conforme.
--
;-)
|
|
| Back to top |
|
 |
James Kanze Guest
|
Posted: Sun Mar 20, 2005 10:39 pm Post subject: Re: PB débutant |
|
|
Michel Michaud wrote:
| Quote: | (Pour le reste, il faut simplement savoir que les champs de
bits peuvent probablement simplifier les programmes qui
manipulent des bits, au détriment de faire un programme
vraiment portable.)
|
Et j'y reviens : où est le problème de portabilité ? Je ne vois
rien qui rendrait un champs de bits moins portable que n'importe
quel type classique, disons int.
--
James Kanze home: www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
James Kanze Guest
|
Posted: Sun Mar 20, 2005 10:47 pm Post subject: Re: PB débutant |
|
|
Michel Michaud wrote:
| Quote: | Dans le message 423c53f1$0$21961$626a14ce (AT) news (DOT) free.fr, James
Kanze <kanze@none> a écrit :
Michel Michaud wrote:
Dans le message
42388f8b$0$15287$7a628cd7 (AT) news (DOT) club-internet.fr, Olivier
[email]ope (AT) club-internet (DOT) fr[/email]> a écrit :
Merci pour vos réponses...
Donc si j'ai bien compris,
struct Machin
{
DWORD Truc : 6, Chose : 26;
};
Signifie que la structure Machin à une taille de DWORD, 4
octets, soit 32 bits et qu'elle est composée de Truc qui
fait 6 bits et Chose qui en fait 26 !!??
Non. Seulement que Truc aura au moins 6 bits utilisables et
Chose en aura au moins 24.
Non. Il est garanti que Truc a exactement 6 bits, et Chose 26.
Je ne suis pas certain que c'est ce que dit la norme (je viens
de relire la norme C, ça ne me semble pas aussi clair). Je
sais évidemment que c'est l'intention.
Je comprends surtout que ma phrase ne semble pas dire
exactement à quoi je pensais (et qui reste peut-être faux...).
Je voulais dire que le compilateur allouera au moins 6 bits
pour que Truc ait bien ses 6 bits utilisables, etc.
|
Tout à fait.
| Quote: | Dans la mésure que les types sont signés, évidemment, c'est
difficile pour un programme conforme de le savoir, mais s'il
sont unsigned, si Truc vaut 63, ++ Truc vaut 0. Garanti par
la norme.
Oui, je suis parfaitement d'accord.
|
Et alors ?
| Quote: | Mais il me semble possible que les 6 bits de Truc ne soit ni
complètement à gauche ni complètement à droite de l'espace
alloué.
|
Et alors ? L'implémentation peut mettre des bits « don't care »
au milieu d'un int, aussi, sans que ce soit un champs de bits.
En quoi est-ce que les champs de bits sont différents.
| Quote: | C'est là que je ne suis pas capable de confirmer en lisant la
norme... Dans mon esprit, si j'ai besoin de manipuler 6 bits
dans quelque chose, je vais le faire avec des décalages et des
masques, car je suis sous l'impression que les champs de bits
ne me garantissent rien. Peut-être que je me trompe, c'est une
vieille idée que j'ai en tête (et comme je ne fais plus
beaucoup de manipulations de bits, elle ne m'a jamais vraiment
dérangée
|
Si tu as besoin d'une représentation précise, disons pour
transmettre les données sur le reseau, à une autre machine, tu
ne vas pas y arriver avec des champs de bits. Ni avec des int,
tout courts, d'ailleurs. Si tu as besoin d'une représentation
précise, tu vas effectivement l'implémenter à coup des décalages
et des masquages. Exactement comme tu fais pour int, d'ailleurs.
| Quote: | Il n'y aucune garantie en ce concerne la taille de Machin,
mais l'intention est clairement précisée que si la taille
d'un DWORD est 32 bits ou plus, que et Truc et Chose se
trouvent dans le même DWORD.
Oui, on est d'accord sur l'intention. Par contre, sur une
machine bizarre, je crois que le compilateur pourrait allouer
beaucoup plus, par exemple deux mots de 32 bits.
|
Certainement. Et alors ? Sur au moins une machine encore vendue,
les int ont 36 bits, et non 32. Où est le problème ? Ça fait
partie de la philosophie de base de C++ (et de C), et ça touche
tous les types, non seulement les champs de bits.
--
James Kanze home: www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sun Mar 20, 2005 10:49 pm Post subject: Re: PB débutant |
|
|
On Sun, 20 Mar 2005 23:39:08 +0100, James Kanze <kanze@none>:
| Quote: | Et j'y reviens : où est le problème de portabilité ?
|
Quand Michel écrivait "les champs de bits peuvent probablement
simplifier les programmes qui manipulent des bits", il est possible
qu'il ait pensé à la même chose que moi :
union
{
unsigned int machin;
struct truc
{
unsigned int bidule: 3;
unsigned int trucmuche: 29;
};
};
pour accéder "facilement" aux trois premiers bits d'un entier, sans
utiliser les opérateurs de bricolage de bits ( >>, &, ...)
--
;-)
|
|
| Back to top |
|
 |
Michel Michaud Guest
|
Posted: Mon Mar 21, 2005 4:38 am Post subject: Re: PB débutant |
|
|
Dans le message 423dfb7b$0$21880$626a14ce (AT) news (DOT) free.fr,
James Kanze <kanze@none> a écrit :
| Quote: | Michel Michaud wrote:
(Pour le reste, il faut simplement savoir que les champs de
bits peuvent probablement simplifier les programmes qui
manipulent des bits, au détriment de faire un programme
vraiment portable.)
Et j'y reviens : où est le problème de portabilité ? Je ne vois
rien qui rendrait un champs de bits moins portable que n'importe
quel type classique, disons int.
|
Pour faire de la manipulation de bits ? Vraiment on ne sait rien
sur les int à ce point ? Par exemple, ne peut-on pas supposer, par
exemple, que ((i & 1) == 0) nous dira si un nombre est pair ?
--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|