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