mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Addieren ungleicher Datentypen in C


Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe eine Variable "offset"vom Typ unsigned int und ein 
8-bit-Register (OCR0 beim Atmega32).
Das HIGH-Byte der Integerzahl ist aufgrund vorheriger Berechnungen 
definitiv Null. Nun will ich beide addieren und den neuen Wert ins 
Register schreiben. Dafür muss ich aber unsigned char als Datentyp 
haben, damit der Wert ins Register passt.

Funktioniert dann der folgende Code:

OCR0 = OCR0 + ((unsigned char) offset);

?!

Viele Grüße und Danke für jeden Tipp!! :)

Dennis

Autor: Alex22 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn das obere Byte definitiv Null ist sollte, meines Wissens, auch

OCR0 = OCR0 + offset;

funktionieren.
Der Kompiler sollte höchstens eine Warnung ausgeben: "Possible loss of 
data".

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay, super. Aber mein Code wäre auch richtig, ja?

DANKE!!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dennis wrote:
> okay, super. Aber mein Code wäre auch richtig, ja?
>

Im Grunde ist dein Code besser :-)
Dadurch, dass du den cast explizit machst, sparst du dem Rechner Arbeit.

Im Code von Alex ist die implizite Casterei entsprechend den C-Regeln so 
zu sehen:

  OCR0 = (unsigned char)( (unsigned int)OCR0 + offset );

und du ahnst es schon: Im Prinzip müsste die Addition als uns. int 
Addition ausgeführt werden. Ein guter Optimizer könnte das wieder 
wegkriegen, da ja das Ergebnis sowieso wieder auf unsigned char gecastet 
wird.

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der cast Operator ist definitiv schöner...

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann ist alles super :)

Danke für Eure Hilfe!!

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.