Forum: Compiler & IDEs Wie wird ein Cast interpretiert?


von Christian W. (clupus)


Lesenswert?

Hallo,

es geht mir nur um die Frage wie in Cast interpretiert wird. Folgendes
Bsp:

int8_t a = -2;
uint8_t b;

b = (int8_t) a;

Was macht der da? Welcher Wert kommt in a? 2 (einfach Betrag von b)?
Oder 254 (die Zahl die der GCC intern verwendet)? Nimmt er also nur
hin, dass es 2 verschiedene Typen sind und macht sonst gar nix oder
macht er aus einer negativen Zahl eine mit unsigned "darstellbare"?

Ziel: Ich will eine int8_t in den EEPROM speichern, die avr-libc hat
aber nur eine Funktion für unsigned. Entweder kann ich das mit einem
Cast umgehen (Fehlermeldung beim Übersetzen) oder ich muss mir notfalls
eine eigene Routine schreiben; wäre aber mit Cast einfacher.

MfG
Christian

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Welcher Wert kommt in a?

254.  Bei Gleitkomma ist das was anderes.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sollte der cast nicht so lauten?

  b = (uint8_t) a;

von Karl H. (kbuchegg)


Lesenswert?

In dem Fall ist mit dem Cast keine Typumwandlung verbunden, wie
es zb. bei einem cast von Floating Point nach Ganzzahl verbunden
wäre.
Der cast bewirkt in diesem Fall, dass das Bitmuster einfach
als uint8_t interpretiert wird. Egal was dann dabei tatsächlich
herauskommt. Im Grunde überschreibst du einfach nur für den
Compiler den Datentyp um ihn für die Zuweisung kompatibel
zu machen. An den tatsächlich beteiligten Bits ändert sich aber
nichts.

von Christian W. (clupus)


Lesenswert?

OK, danke, das war's schon

Merci bien
Christian

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.