Frage Vergleich bei uint überlauf

#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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren