Frage Vergleich bei uint überlauf

OP #3311999
Lesenswert?
• ▲
▼
Hallo,

habe folgenden Code:
1
//AVR/GNU C Compiler : 3.4.2
2
#include <avr/io.h>
3
int main(void)
4
{
5
  uint8_t var1, var2, var3;
6
  while(1)
7
  {
8
    var1=0xFF;
9
    var2=0;
10
    var3=0;
11
    do{
12
      var3++;
13
      }
14
    while(var2==var1+1);
15
    return 0; 
16
  }
17
}

bei der Simulation wird aus der while heraus geprungen. Mir ist nicht 
ganz klar warum. Die Addition hat eine größere Bindung als der Vergleich 
trozdem wird 0 == 0xFF verglichen und nicht 0 == 0 verglichen. Wenn die 
Variablen int8_t sind funktioniert die Abfrage (var2 == -1+1) 
Endlosschleife was einleuchtet.
Was nicht einleuchtet warum 0xFF +1 nicht funktioniert var1 müsste doch 
auf 0 überlaufen. Irgendjemane nen tipp?
Gast #3312024
Lesenswert?
• ▲
▼
Du mußt auch die integer promotion berücksichtigen. var1 und var2 werden 
in dem Ausdruck erstmal auf int erweitert, und damit wird dann die 
Addition und der Vergleich ausgeführt.
Damit steht auf der rechten Seite deines Vergleichs aber 0x0100.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.