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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.