mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Werner (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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 ...
...

uint8_t vc;

...

vc = (vc - 1) % 96;

...


Version 2 zählt ... 1, 0, 63, 62 ...
...

uint8_t vc;

...

--vc;
vc = vc % 96;

...


Autor: Arno (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Arno

Danke für die Erklärung.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.