Christoph Gärtner: C - casten

Beitrag lesen

Morgen.

Wenn man jedoch in die andere Richtung casten will, ist das Ergebnis angeblich "implementation-specific".

uint32 a = 0xffffffff;
sint32 b = (sint32) a; b = ???

»»

Es scheint allerdings keine Implementierung zu geben, wo nicht einfach die Bit-Repräsentation als signed integer interpretiert wird.

Mal ganz praktisch Gedacht: Auf welchen obskuren Plattform-Compiler-Kombinationen soll das Ding denn mal laufen? Laut ISO/IEC 9899:TC2, Punkt 6.3.1.3 ist das Verhalten 'implementation-defined', aber wenn du die Ziel-Implementierung kennst...

Ansonsten kannst du auch etwas mit Zeigern spielen, so dass sich am Wert der Variablen nichts ändert, nur an deren Interpretation; bei meinem GNU liefern beide Versionen das Ergebnis -1:

  
uint32_t a = 0xffffffff;  
int32_t b = (int32_t)a; // b = -1  
int32_t c = *(int32_t*)(&a); // c = -1  

Gruß
 Christoph