🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.lang.c
Article #15381

Re: champ de bits...

#15381
From: Charlie Gordon
Date: Sun, 25 Sep 2005 18:30
55 lines
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-mail
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>

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