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?