www.mikrocontroller.net

Forum: Compiler & IDEs Automatischer Cast


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)-

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.