www.mikrocontroller.net

Forum: Compiler & IDEs Typumwandlung in C


Autor: Student (Gast)
Datum:
Angehängte Dateien:

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

Autor: kosmonaut pirx (Gast)
Datum:

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

Autor: Student (Gast)
Datum:

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

Autor: Simon K. (simon) Benutzerseite
Datum:

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

Autor: kosmonaut pirx (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: kosmonaut pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, korrekt. danke johannes

Autor: Student (Gast)
Datum:

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

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.