mikrocontroller.net

Forum: Compiler & IDEs Expliziete Typenumwandlung


Autor: Hajo Harms (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

weiß jemand was genau bei einer explizieten Typenumwandlung von double
nach int passiert ?

double val = 10,25;
int erg;

erg = (int) val;

normalerweise verliere ich den nachkomma Teil oder?
Und ist das verhalten für negative Zahlen dasselbe ?
 Ich habe hier seltsamme Ergebnisse :-)

Grüße Hajo

Autor: Stefan Kleinwort (_sk_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> erg = (int) val;

Damit sagst Du dem Compiler, dass er val als ein Integer Wert
interpretieren soll - wider dessen besseres Wissen.

Der Compiler liest also die Speicherstellen von val so, als ob dort ein
Integer statt dem tatsächlichen double gespeichert wäre. Das gibt
natürlich Unsinn.

Was Du (wahrscheinlich) willst, funktioniert ohne das (int): eine
Typumwandlung des double in int wird automatisch gemacht, wenn Du
schreibst:

erg = val;

Stefan

Autor: Hajo Harms (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

also soweit ich das kenne und nutze ist eine expliziete Typenumwandlung
das gleiche wie eine impliziete. Bei diversen Compilern kann man
einstellen das eine impliziete Typenumwandlung als Fehler oder
zumindest als Warnung ausgegeben wird. Dadurch werden
Konvertierungsfehler weitgehend erkannt.

Also ist

erg = val;

das gleiche wie

erg = (int) val;

nur das bei der letzten Version ganz klar ist was gemeint ist.

Das Einzige was bei einer solchen Umwandlung kritisch wäre ist das laut
C nicht definiert ist was bei einer Typenumwandlung von negativem double
in vorzeichenlose Int passiert. Nur das habe ich nicht gemacht :-)

Grüße Hajo

Autor: Stefan Kleinwort (_sk_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, vergiss mein Posting von gestern, war wohl schon etwas spät am
Abend.

Was sind denn genau "seltsame Ergebnisse"?

Der erzeugte Code ist übrigens gleich - ob mit oder ohne (int).

Viele Grüße, Stefan

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.