Forum: Compiler & IDEs Expliziete Typenumwandlung


von Hajo Harms (Gast)


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

von Stefan K. (_sk_)


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

von Hajo Harms (Gast)


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

von Stefan K. (_sk_)


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

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.