Wie wird ein Cast interpretiert?

OP #412007
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
#412010
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren