Gast
#735536
Wer hilft mir, bei der Demontage meines Brett vorm Kopf? geht nicht:
1 | |
2 | |
3 | |
4 | |
5 | |
geht:
1 | |
2 | |
3 | |
4 | |
5 | |
|
Anzeige
|
for-Schleife und dekrementieren
Gast
#735536
Wer hilft mir, bei der Demontage meines Brett vorm Kopf? geht nicht:
geht:
Gast
#735537
die Bedingnung in der for schleife ist einfach immer true, oder was geht nicht? Walter Das liegt daran, dass "long" ein signed Datentyp ist. Und da deine For-Schleife solange läuft, wie die Iterationsvariable größer oder gleich 0 ist (Also die Schleife nur abbricht, wenn die Variable auf -1 dekrementiert wird), funktioniert das nicht mit einem unsigned-Typ (wie der uint8_t). Das "Sign" ist in diesem Fall das Vorzeichen. Ein unsigned-Typ hat also kein Vorzeichen.
Gast
#735539
uint8_t i; wär ja wohl ein unsigned char, wertebereich: 0 ... 255. Der kann nicht kleiner als 0 werden ;-) Ein long schon, weil signed. Die Begründung hast du ja schon.
Ersetze die erste Schrleife z.B. durch
uint8_t i;
i = 255;
do
{
// irgendwas
} while(i--);
Frohes Fest!
Gast
#736011
Oh mann! Danke für die Hilfe. War ein dickes Brett. Habe klar übersehen, daß vor dem Vergleich dekrementiert wird und dann ja -1 raus kommt. :-\ Nee, nicht richtig. -1 kann nie rauskommen, weil i im ersten Beispiel ein unsigned Datentyp ist, d.h. ohne Vorzeichen, d.h. immer positiv oder gleich null. Du hättest wenn i gleich 0 ist in der nächsten Schleife beim Dekrementieren einen Überlauf und i wäre 255 (wegen 8-Bit in uint8_t). Du hast dann mit der ersten for-Schleife eine unsaubere Endlosschleife produziert. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|