Article View: fr.comp.lang.c
Article #15381Re: champ de bits...
From: Charlie Gordon
Date: Sun, 25 Sep 2005 18:30
Date: Sun, 25 Sep 2005 18:30
55 lines
3447 bytes
3447 bytes
"Pierre Maurette" <maurettepierre@wanadoo.fr> wrote in message news:mn.c2627d590d12cbdb.31483@laposte.net... > Charlie Gordon, le 24/09/2005, a �crit : > [...] > > Enfin unsigned est un synonyme de unsigned int, et il est en effet imp�ratif > > de d�finir comme non sign�s les champs de 1 bit ;-) > Je crois que c'est un bonne pr�caution. Tu es donc moins cat�gorique que moi... > Si le type est unsigned int, le champs ne pourra prenbre que les > valeurs 0 et 1, et c'est portable. Les comparaisons (cfg.t1 == 0) et > (cfg.t1 == 1) produiront les r�sultats attendus de fa�on portable. De > plus, elles sont coh�rentes avec l'intuition d'un bool�en et surtout > d'un bit sous-jacent. En effet. > Si le type est int, sur une impl�mentation compl�ment � 2, le champs ne > pourra prenbre que les valeurs 0 et -1, et ce n'est � mon avis pas > portable. En fait, les d�finitions concernant le codage des n�gatifs > ont peu de sens dans le cas d'uns seul bit. Faux. Tu d�cris le cas du type "signed int" pour une impl�mentation en compl�ment � 2, qui est portable sur les architectures en compl�ment � 2 justement. Les autres architectures (dont j'attends toujours qu'on m'exhibe des exemples qui ne sortent ni du mus�e, ni de la gamme DS9000) ont un probl�me pour les champs de bits sign�s de 1 bit, qui ne peuvent repr�senter que la valeur 0 et �ventuellement une valeur invalide. En revanche le cas du type int laisse � l'impl�mentation le choix de la s�mantique de signed int ou de unsigned int. C'est ce qui en fait le caract�re non portable. Et meme non fonctionnel pour une taille de bit-field de 1 bit. > Bien entendu, si l'on est dans la s�mantique d'un bool�en, la > comparaison (cfg.t1 != 0) produira toujours le r�sultat attendu. Sauf dans les cas d�crits ci-dessus. > Si on > travaille avec un type bool, dans le deux cas, il faudra faire par > exemple: > bool state = (cfg.t1 != 0); Sauf en C99 ou cette conversion est implicite, mais avec unsigned ce n'est meme pas necessaire. Conclusion : il est pr�f�rable de prendre un type unsigned pour les champs de bits en g�n�ral. Pour ceux de largeur 1 en particulier, ce n'est pas juste une bonne pr�caution, c'est n�cessaire pour que la s�mantique soit pr�visible et correcte. -- Chqrlie.
Technical Details
Message-ID:
<dh6oqn$q29$1@reader1.imaginet.fr>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newspeer1.nwr.nac.net!colt.net!fr.colt.net!writer!not-for-mailReferences:
<433442ce$0$12992$7a628cd7@news.club-internet.fr> <4334462d$0$24227$626a14ce@news.free.fr> <dh2gbt$6f6$1@reader1.imaginet.fr> <mn.c2627d590d12cbdb.31483@laposte.net>Show Full Headers
Complete Article Headers
X-Google-Thread: f9822,f57b8b7d4d821213 X-Google-Attributes: gidf9822,public X-Google-Language: FRENCH,ASCII Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newspeer1.nwr.nac.net!colt.net!fr.colt.net!writer!not-for-mail From: "Charlie Gordon" <news@chqrlie.org> Newsgroups: fr.comp.lang.c Subject: Re: champ de bits... Date: Sun, 25 Sep 2005 20:30:05 +0200 Organization: ImagiNET / Colt Internet Lines: 57 Message-ID: <dh6oqn$q29$1@reader1.imaginet.fr> References: <433442ce$0$12992$7a628cd7@news.club-internet.fr> <4334462d$0$24227$626a14ce@news.free.fr> <dh2gbt$6f6$1@reader1.imaginet.fr> <mn.c2627d590d12cbdb.31483@laposte.net> NNTP-Posting-Host: gw.netgem.com X-Trace: reader1.imaginet.fr 1127671447 26697 195.68.2.34 (25 Sep 2005 18:04:07 GMT) X-Complaints-To: abuse@imaginet.fr NNTP-Posting-Date: 25 Sep 2005 18:04:07 GMT X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1506 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1506