Forum: Mikrocontroller und Digitale Elektronik Addieren ungleicher Datentypen in C


von Dennis (Gast)


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

von Alex22 (Gast)


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".

von Dennis (Gast)


Lesenswert?

okay, super. Aber mein Code wäre auch richtig, ja?

DANKE!!

von Karl H. (kbuchegg)


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.

von Berti (Gast)


Lesenswert?

Der cast Operator ist definitiv schöner...

von Dennis (Gast)


Lesenswert?

Dann ist alles super :)

Danke für Eure Hilfe!!

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.