Addieren ungleicher Datentypen in C

Gast #1174851
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
Gast
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".
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.