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;
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.
>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
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.