Forum: Compiler & IDEs Automatischer Cast


von Gast (Gast)


Lesenswert?

Wie ist der C Standard? Wird ein automaticher Cast gemacht, wenn das 
Ergebnis von r und v größer 16 Bit ist? Auf den meisten Compiler läuft 
dieser Code aber jetzt habe ich einen Compiler auf dem es nicht läuft, 
bei dem muss ich r und v erst explizit auf U32 casten. Ich hatte nämlich 
angenommen, das dies der Compiler implizit selber machen würde.

U32 Sum;
U16 r;
U16 v;


Sum = (U16)~r + v;

von Karl H. (kbuchegg)


Lesenswert?

Gast wrote:
> Wie ist der C Standard? Wird ein automaticher Cast gemacht, wenn das
> Ergebnis von r und v größer 16 Bit ist?

Nein.
Der Datentyp eines Ergebnisses hängt ausschliesslich von den Datentypen 
der beteiligten Operanden ab.

Deine Operanden im Ausdruck

  (U16)~r + v

sind alle U16, also hat auch das Ergebnis erst mal den Datentyp U16 und 
die Operation wird im Zahlenraum U16 gemacht. Wenn die Operation dabei 
überläuft: Pech gehabt.

Erst dann, wenn das Ergebnis des Ausdrucks feststeht, wird die Zuweisung 
betrachtet: Links steht ein U32, rechts ein U16, also wird das Ergebnis, 
nachdem es berechnet wurde, auf U32 gebracht und zugewiesen.

von Oliver (Gast)


Lesenswert?

>Auf den meisten Compiler läuft dieser Code

Auf den allermeinsten Compilern läuft gar kein Code, sondern nur auf den 
dazugehörigen Zielprozessoren.

Auf welchen Compiler-/Prozessorkombinationen "läuft" denn dein Beispiel?

Oliver

von Gast (Gast)


Lesenswert?

@Karl heinz Buchegger
Danke, hatte eben etwas anderes im Kopf und deswegen auf dem Schlauch 
gestanden. So wie du es sagst ist es richtig und auch logisch.

@Oliver
Klugscheisser ;-)-

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.