Andreas schrieb:
> @Heinz: Das funktioniert eben nicht generell bei allen Compiler
> Manche unterstützen nur 16-bit Variablen.
>
> @Stefan:
> Die Zweierkomplementbildung ist mir schon klar. Ich habe mir aber
> gedacht, es könnte Kompatiblitätsprobleme geben, da die Bytes nicht in
> allen Betriebssystemen gleich angeordnet sind.
C macht keine Angabe darüber, wie negative Zahlen dargestellt werden!
Zweierkomplement ist üblich, aber nicht zwingend -- was auch der Grund
dafür ist, daß signed-Überlauf in C undefined ist und Compiler das
ausnutzen können.
Mit der if/else vanilla-Variante bist du auf der sicheren Seite; Problem
stellt lediglich INT32_MIN dar, da im Zweierkomplement -INT32_MIN nicht
darstellbar ist und auf INT32_MIN abgebildet wird. Will man das abfangen
(etwa durch Abbildung auf INT32_MAX), dann muss das vor der
Betragsbildung geschehen! Versucht man es danach, darf der Compiler
verwenden, daß signed-Überlauf undefined ist!