Forum: Compiler & IDEs Entscheidungsoperationen in AVR GCC


von Owen S. (senmeis)


Lesenswert?

Servus,

ich möchte zwei Variablen unter AVR GCC vergleichen und zwar mit einem 
Casting:
1
int8_t a = 0x81;  // 10000001b
2
uint8_t b = 0x80;  // 10000000b

Was bekomme ich beim Vergleich "
1
(int8_t)b < a
"?

Wenn das Casting funktioniert, ergibt sich "-128 < -127", also "true";
Sonst "128 < -127", also "false". Wo finde ich solche Regeln?

Gruss
Senmeis

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Kannst Du Dich etwas klarer ausdruecken? Welche "Regeln" meinst Du? 
Meinst Du Grammatikregeln oder eine semantische Beschreibung?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Owen, schau mal in den ANSI C Standard rein. Das ist die 
Sprachbeschreibung von C an die sich die Compilerbauer halten sollen.

Und schau dort dort speziell den Punkt integer promotions nach und ob 
der bei dem if-Statement von der Sprache C her durch den AVR GCC ohne 
dein Zutun gemacht werden muss oder nicht.

Auf die Schnelle kann ich dir einen Link auf eine Draft-Version des ANSI 
C Standards geben: 
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

Ich habe nicht geprüft, ob das dem aktuell gültigen Standard entspricht.

von Jürgen (Gast)


Lesenswert?

Am besten castest du beide Werte auf den gleichen Typ,
dann ist auch klar was beim Vergleich passiert.

Jürgen

von Peter D. (peda)


Lesenswert?

Owen Senmeis wrote:
> Wenn das Casting funktioniert, ergibt sich "-128 < -127", also "true";

Also mit Casting (DSDS) hat das nicht zu tun.

Das Casten funktioniert aber, denn dazu ist es ja da.


Peter

von (prx) A. K. (prx)


Lesenswert?

Ist das gleiche Verb in unterschiedlicher Zeitform.

von tata (Gast)


Lesenswert?

> Und schau dort dort speziell den Punkt integer promotions nach und ob
> der bei dem if-Statement von der Sprache C her durch den AVR GCC ohne
> dein Zutun gemacht werden muss oder nicht.
>
Boardsuche reicht hier:
http://www.mikrocontroller.net/attachment/37776/constant.jpg
aus
Beitrag "C-codezeile interpretieren"

Frohes (Rest-)Fest ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.