Forum: Compiler & IDEs Typumwandlung in C


von Student (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, ich bin bald am verzweifeln, morgen ist Klausur angesagt, und ich 
bekomme diese Aufgabe nicht gelöst (s. Anhang), bzw. sie ist ja schon 
gelöst nur kann ich die Lösungen nicht nachvollziehen, Tante Googel 
brachte mir auch nichts, zum Thema Typumwandlung, vielleicht kann mir 
das jemand erklären, oder mir sagen wo ich es nachlesen kann...

Schonmal dankeschön im Voraus

von kosmonaut pirx (Gast)


Lesenswert?

hallo,
wo brennt's denn genau?

prizipiell wird immer auf das höhere promotet, afaik. und für deine 
lösung passt das auch.

bye kosmo

von Student (Gast)


Lesenswert?

Halls Kosmonaut,
ok, das ist schonmal ein guter Hinweis danke ;-)
Ich verstehe z.B. nicht was float x=0.3f bedeutet, bzw. wofür das f 
steht, was bringt das?
Dann verstehe ich nicht woher aufeinmal das unsigned kommt und was 
*(A+3) bedeutet.
Oder wofür in der letzten Zeile 3.14L steht, und unsigned long ist doch 
keine Datentyp was ist damit gemeint?

von Simon K. (simon) Benutzerseite


Lesenswert?

Student wrote:
> Halls Kosmonaut,
> ok, das ist schonmal ein guter Hinweis danke ;-)
> Ich verstehe z.B. nicht was float x=0.3f bedeutet, bzw. wofür das f
> steht, was bringt das

Dann behandelt der Compiler die 0.3 als Float-Zahl.

> Dann verstehe ich nicht woher aufeinmal das unsigned kommt

Unsigned? Du meinst in der Variablendeklaration? Das bedeutet, dass die 
Zahl kein Vorzeichen besitzt.

> und was
> *(A+3) bedeutet.

A ist ein Pointer (Okay es ist kein Pointer, wird aber vom Compiler so 
behandelt). A + 3 lässt den Pointer um 3 "chars" weiterrücken. Das * ist 
kein Multiplikationsoperator, sondern ein Indirektionsoperator, der dem 
Compiler sagt, dass er nicht A (Also die Adresse verwenden soll), 
sondern das, was an der Speicherstelle A geschrieben steht.

> Oder wofür in der letzten Zeile 3.14L steht, und unsigned long ist doch
> keine Datentyp was ist damit gemeint?

Das L castet diese Zahl in einen Long-typ. Und Long ist ein Datentyp (in 
der Regel 32-Bit). Übrigens ist 3.14L Schwachsinn, da hierbei die 
Stellen hinter dem Komma verloren gehen. Aber ist ja auch nur ein Test 
;)

von kosmonaut pirx (Gast)


Lesenswert?

hallo,

>Ich verstehe z.B. nicht was float x=0.3f bedeutet, bzw. wofür das f
>steht, was bringt das?

'f' ist ein suffix, um zu zeigen: hey, das ist ein float. um genau zu 
sein: eine float-konstante. ohne dass sind gleitpunkt-zahlen erstmal 
double's (lt. k&r).
und L bzw. l ist das eben für long.

>Dann verstehe ich nicht woher aufeinmal das unsigned kommt

aus dem einen operanden. das fällt nicht unterm tisch.

>und was *(A+3) bedeutet

hm, basics. A ist ein array. der name eines arrays ist auch ein pointer, 
und zwar auf das erste element des array. A+3 bedeutet den pointer 3 
vorgeschoben, ergo zeigt er jetzt auf das dritte element des arrays. * 
dereferenziert, holt das element ran. genausogut hätte man auch A[3] 
schreiben können. aber darum geht's ja nicht: ein element eines arrays 
hat erst einmal den typ, der für das array gewählt wurde. was auch 
sonst.

>unsigned long ist doch keine Datentyp was ist damit gemeint?

warum nicht? long ist ein erweiterter int (doppelt so groß)


ok, zu langsam. na egal, doppelt hält besser :)
bye kosmo

von Johannes M. (johnny-m)


Lesenswert?

kosmonaut pirx wrote:
> ...ergo zeigt er jetzt auf das dritte element des arrays.
Eher auf das vierte (Index 0, also (A + 0) wäre das "erste")... 
Ansonsten volle Zustimmung.

von kosmonaut pirx (Gast)


Lesenswert?

ja, korrekt. danke johannes

von Student (Gast)


Lesenswert?

Hallo, vielen dank, für die guten Erklärungen, haben mir echt 
weitergeholfen :-)

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.