Typ/Vorzeichen von Konstanten bei Vergleichen in C

Gast #1016119
Lesenswert?

Hab leider gerade kein C-Buch zur Hand, stelle hier also eine dumme 
Frage. Wie war das noch mit dem Typ und Vorzeichen von Konstanten bei 
Vergleichen in C? Beispiel:
Warum wird der int8_t Variablen "byte" mit dem Wert '-128' in diesem 
Beispiel (WinAVR-20071221, Programm kompiliert mit der Option '-Os') 
durch das 'if' der Wert '127' zugewiesen ...
1
#include <inttypes.h>
2
int8_t byte=-128;
3
int main(void) {
4
    while (1) {
5
        if (byte==(int8_t)0x80) byte=127;
6
                     // byte ist jetzt 127
7
    } 
8
}

.... ohne typecast für '0x80' aber nicht (tatsächlich wird das 'if' 
sogar bei 'O0' wegoptimiert, aber es geht mir nicht um die Optimierung, 
sondern nur um den Typ/das Vorzeichen der Konstanten beim Vergleich)?
1
#include <inttypes.h>
2
int8_t byte=-128;
3
int main(void) {
4
    while (1) {
5
        if (byte==0x80) byte=127;
6
                     // byte bleibt -128
7
    } 
8
}

Anmerkung: Bei der Initialisierung der Variable ist 'int8_t byte=-128;' 
identisch mit 'int8_t byte=0x80;', nur beim Vergleich ist ein explizites 
typecasting nötig.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren