Forum: Compiler & IDEs Frage Vergleich bei uint überlauf


von Kai G. (shangkai)


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?

von Rolf Magnus (Gast)


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.

von Kai G. (shangkai)


Lesenswert?

Danke für die schnelle Antwort. Gewusst wie! Wenn der Ausdruck auf int 
erweitert wird ist alles klar!!!

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.