Vergleich int16_t mit uint16_t

Gast #2896543
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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.