Datum: 03.07.2008 12:07
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?
Datum: 03.07.2008 12:14
BTW: Wie sieht eigentlich size_t aus? Kann man einfach int in size_t casten?
Datum: 03.07.2008 12:17
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 ;)
Datum: 03.07.2008 12:18
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.
Datum: 03.07.2008 13:05
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?!
Datum: 03.07.2008 13:29
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 Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel


