www.mikrocontroller.net

Forum: Compiler & IDEs casten allgemein


Autor: Josef Kaeufl (josefk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mir ist gerade klar geworden, dass ich keine ahnung habe was bei einem 
cast passiert. Wenn ich z.B. einen int-Wert in ein char caste, was 
passiert dann?

Wird der Inhalt einfach auf 8bit gekürzt, oder wird der Inhalt auf 
irgendeine Weise interpretiert?

Autor: Josef Kaeufl (josefk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BTW: Wie sieht eigentlich size_t aus? Kann man einfach int in size_t 
casten?

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Josef Kaeufl wrote:
> Wird der Inhalt einfach auf 8bit gekürzt, oder wird der Inhalt auf
> irgendeine Weise interpretiert?

Ja. Sofern char 8-Bit hat ;)

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Josef Kaeufl wrote:
> BTW: Wie sieht eigentlich size_t aus? Kann man einfach int in size_t
> casten?

size_t hat üblicherweise 32 oder mehr Bits. Da sollte eigentlich gar 
kein expliziter cast notwendig sein.

Autor: Josef Kaeufl (josefk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso. OK. Also wird einfach bitweise, je nachdem wie groß der typ ist 
auf den gecastet wird, gekürzt und der Wert erst wieder später bei 
Nutzung (Unterschied unsigned signed) interpretiert?!

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

Bewertung
0 lesenswert
nicht lesenswert
Beim casten gibt es 2 Möglichkeiten

* zum einen kann ein cast einfach nur ausdrücken:
  "Ich möchte, dass du diese Bitfolge mit einem anderen
   Datentyp siehst, als sie ihn zur Zeit hat."

  An der Bitfolge ändert isch dabei überhaupt nichts.
  Lediglich der Datentyp innerhalb eines Ausdrucks verändert
  sich und wird dadurch unter Umständen kompatibel zu seiner
  Verwendung.

  zb. Pointer umcasten.

  Wenn du einen Pointer hast:
   char * pPtr;

  und du möchtest den Pointer dazu benutzen, einen int aus dem
  Speicher zu lesen, dann musst du den Datentyp des Pointers
  umcasten.

  int j = * (int*) pPtr;

  Hier verändert der Pointer seine Bitfolge nicht. Lediglich
  der Datentyp wird von char* auf int* umgeändert, damit die
  nachfolgende Dereferenzieraktion (der *) das richtige tut:
  einen int aus dem Speicher zu holen.

  Dieser cast ist nur für den Compiler interessant, wenn er
  verfolgt, welche Aktionen sich aus einem Ausdruck ergeben.
  Denn dabei muss er natürlich immer den Datentyp der beteiligten
  Operanden berücksichtigen. Und genau in diese Auswertung greifst
  du mit einem cast ein.

* und dann gibt es noch casts, die tatsächlich eine Veränderung
  der Bitfolge zur Folge haben.
  zb. das Umcasten von int auf double oder umgekehrt ist so
  ein Fall.
  Die internen Repräsentierungen ein und derselben Zahl sind
  für int und double unterschiedlich. Also muss bei einem ev.
  cast umgewandetl werden. Hier hat der cast also tatsächlich
  etwas zu tun und manifestiert sich im Programm in Form von
  Code.

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.