Forum: Compiler & IDEs Vergleich int16_t mit uint16_t


von Martin (Gast)


Lesenswert?

Hallo,

ich habe bei meinen Programm folgendes festgestellt:
1
uint16_t Var1 = 80
2
int16_t Var2 = -70
3
if (Var2 > Var1){ 
4
    Var2= Var1;
5
}

Nach dieser Anweisung ist Var2=80, obwohl eigentlich kleiner als Var1.
Scheinbar konvertiert das Programm Var2 beim Vergleich in ein uint16_t. 
Denn so funktionierts:
1
uint16_t Var1 = 80
2
int16_t Var2 = -70
3
if (Var2 > (int16_t) Var1){ 
4
    Var2 = Var1;
5
}

hier bleibt Var2 = -70

Aber wieso? Ist das C-Standard, dass bei Vergleichen von signed und 
unsigned beide Operanden nach unsigned konvertiert werden?

von (prx) A. K. (prx)


Lesenswert?

Ja, wenn sizeof(int16_t)==sizeof(int) [AVR]. Andernfalls nein [ARM].

von Stefan E. (sternst)


Lesenswert?

Martin schrieb:
> Aber wieso? Ist das C-Standard, dass bei Vergleichen von signed und
> unsigned beide Operanden nach unsigned konvertiert werden?

Wenn beide die gleiche Größe haben (und diese mindestens der Größe eines 
int entspricht), dann ja.

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.