Automatischer Cast

Gast #1229399
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;
#1229409
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.
Gast #1229437
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

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