Forum: Compiler & IDEs Wo ist das Problem (C: %-Operator)?


von Werner (Gast)


Lesenswert?

Atmel Studio 7 (Version: 7.0.1645 - ) ohne Optimierung.

Warum produziert Version 1 die 255? Dachte, dass beide Versionen 
identisch sind.


Version 1 zählt ... 1, 0, 255, 62 ...
1
...
2
3
uint8_t vc;
4
5
...
6
7
vc = (vc - 1) % 96;
8
9
...

Version 2 zählt ... 1, 0, 63, 62 ...
1
...
2
3
uint8_t vc;
4
5
...
6
7
--vc;
8
vc = vc % 96;
9
10
...

von Arno (Gast)


Lesenswert?

Der Unterschied ist, wann die "Zwischenergebnisse" auf uint8_t (bzw. 
unsigned char) gecastet werden. Das passiert nämlich genau bei der 
Zuweisung zu vc.

Im ersten Fall:

0 - 1 -> -1
-1 % 96 -> -1
(uint8_t) -1 -> 255.

Im zweiten Fall:

0 - 1 -> -1
(uint8_t) -1 -> 255.
255 % 96 -> 63

MfG, Arno

von Werner (Gast)


Lesenswert?

@ Arno

Danke für die Erklärung.

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.