Article View: fido.ger.c_echo
Article #20Re: if(t==~t_n) ???
From: Peter Schuette
Date: Fri, 12 Sep 1997 00:00
Date: Fri, 12 Sep 1997 00:00
34 lines
1712 bytes
1712 bytes
PS> Hi!
Hallo Peter!
PS> Mal eine Frage, insbesondere an die ANSI-Spezis.
PS> Wenn ich Variablen
PS> unsigned char t, t_n;
PS> habe und
PS> t_n = ~t;
PS> ist, dann ist bei meinem Compiler
PS> if(t==~t_n) .....
PS> nicht wahr.
Das Stichwort hier hei�t "integral promotion". D.h. das bei ~ der Compiler
den Ausdruck (hier unsigned char) auf einen int "aufbl�st".
Angenommen t == 1. Dann ist t_n == 0xFE.
Dann sieht der Vergleich folgenderma�en aus
if (0x0001 == 0xFFFE) { ...
Der linke Teil des Vergleiches ist ein char, der rechte Teil ~t_n == 0xFE
wird vom Compiler auf ein int erweitert, also 0xFFFE. Dieser Vergleich
kann NIE wahr liefern, da 0xFFFE gr��er ist als JEDER char.
Ein cast an der richtigen Stelle, sollte das beheben.
if (t == (unsigned char)~t_n) { ...
(BTW, einige Compiler warnen bei solchen Konstruktionen.
Einen sehr interessanten Artikel zu dem Thema gab's in
Design & Elektronik
Embedded Control
S. 72ff)
cu Peter
Technical Details
Message-ID:
<MSGID_2=3A2452=2F260.25_d45b1ee1@fidonet.org>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<MSGID_2=3A248=2F6301.10=40fidonet_d428ca9a@fidonet.org>Show Full Headers
Complete Article Headers
X-Google-Language: GERMAN,ASCII X-Google-Thread: 100a0f,2bebbbd8d2a494d3 X-Google-Attributes: gid100a0f,public From: Peter.Schuette@p25.f260.n2452.z2.fidonet.org (Peter Schuette) Subject: Re: if(t==~t_n) ??? Date: 1997/09/12 Message-ID: <MSGID_2=3A2452=2F260.25_d45b1ee1@fidonet.org> X-Deja-AN: 272355397 References: <MSGID_2=3A248=2F6301.10=40fidonet_d428ca9a@fidonet.org> X-FTN-Path: 2452/260 250 24/888 777 2480/2 13 843 X-Comment-To: (Peter Schuetz) X-FTN-Seen-By: 2480/412 843 861 3500 8013 2487/0 2490/5001 2494/28 X-FTN-Tearline: CrossPoint v3.11 R X-FTN-Domain: Z2@fidonet X-Gateway: FIDO .. gamma.ray.camelot.de [FIDOGATE 4.1.5] Newsgroups: fido.ger.c_echo