Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Vorwort des Gutachters
1 Einstieg in C
2 Das erste Programm
3 Grundlagen
4 Formatierte Ein-/Ausgabe mit »scanf()« und »printf()«
5 Basisdatentypen
6 Operatoren
7 Typumwandlung
8 Kontrollstrukturen
9 Funktionen
10 Präprozessor-Direktiven
11 Arrays
12 Zeiger (Pointer)
13 Kommandozeilenargumente
14 Dynamische Speicherverwaltung
15 Strukturen
16 Ein-/Ausgabe-Funktionen
17 Attribute von Dateien und das Arbeiten mit Verzeichnissen (nicht ANSI C)
18 Arbeiten mit variabel langen Argumentlisten – <stdarg.h>
19 Zeitroutinen
20 Weitere Headerdateien und ihre Funktionen (ANSI C)
21 Dynamische Datenstrukturen
22 Algorithmen
23 CGI mit C
24 MySQL und C
25 Netzwerkprogrammierung und Cross–Plattform-Entwicklung
26 Paralleles Rechnen
27 Sicheres Programmieren
28 Wie geht’s jetzt weiter?
A Operatoren
B Die C-Standard-Bibliothek
Stichwort

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch
Buch: C von A bis Z

C von A bis Z
3., aktualisierte und erweiterte Auflage, geb., mit CD und Referenzkarte
1.190 S., 39,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1411-7
Pfeil 7 Typumwandlung
Pfeil 7.1 Implizite Datentypumwandlung
Pfeil 7.1.1 Implizites »char« nach »int«
Pfeil 7.1.2 Implizites »float« nach »double«
Pfeil 7.1.3 Implizite Umwandlung in einen komplexen Gleitpunkttyp
Pfeil 7.1.4 Übliche arithmetische Datentypumwandlung
Pfeil 7.2 Explizite Datentypumwandlung mit dem »cast«–Operator


Rheinwerk Computing - Zum Seitenanfang

7.2 Explizite Datentypumwandlung mit dem »cast«–Operator topZur vorigen Überschrift

Da die implizite Datentypumwandlung häufig zu Fehlern bzw. unerwünschten Ergebnissen führen kann, gibt es noch die explizite Datentypumwandlung, womit der Variablentyp mit cast-Operator durchgeführtwerden kann. Dieses explizite Casten des Datentyps wird quasi entgegen der Compiler-Regeln erzwungen. Der cast-Operator besteht aus einem eingeschlossenen gültigen Datentyp.

Die Syntax einer expliziten Typumwandlung sieht folgendermaßen aus:

(typ) ausdruck;

Dabei wird zuerst der ausdruck ausgewertet, und anschließend wird dieser Wert in einen Datentyp typ umgewandelt.

Das folgende Beispiel zeigt das implizite und das explizite Type-Casting im Vergleich:

/* casting.c */
#include <stdio.h>

int main(void) {
   int x = 5, y = 2;
   float z;
   // Implizite Datentypumwandlung
   z = x / y;
   printf("%f\n", z);             // = 2.000000
   // Explizite Datentypumwandlung
   z = (float) x / (float) y;
   printf("%f\n", z);             // = 2.500000
   return 0;
}

Die erste Berechnung

z = x / y;

gibt das Ergebnis »2.000000« aus. Das ist leicht nachvollziehbar, denn es werden zwei int-Werte dividiert. int-Werte können keinen Wert nach dem Komma darstellen. Dass hier das Ergebnis dennoch vom Typ float ist, verdanken Sie dem impliziten Type-Casting des Compilers.

Die Berechnung

z = (float) x / (float) y;

konvertiert die beiden Datentypen int explizit in float-Typen. Deshalb erhalten Sie als Ergebnis »2.500000« zurück.

Wichtig ist dabei, dass x und y im Programm weiterhin vom Datentyp int sind. Das »Casten« des Datentyps ist nur während dieser einen Ausführung gültig.

Es hätte auch gereicht, nur einen dieser beiden Typen zu casten, denn wenn Sie zwei verschiedene Variablen miteinander durch Operatoren verknüpfen, bekommen Sie das Ergebnis des genaueren Typs dieser beiden Variablen zurück:

z = (float) x / y; /* Ergebnis = 2.50000 */

Aber Achtung, falls Sie vorhaben, Gleitpunktzahlen in Ganzzahlen umzuwandeln – etwa folgendermaßen:

long x;
float z = 5.5;
x = (long) z;

Hier wird der Wert nach dem Komma abgeschnitten. Falls Sie einen Wert umwandeln wollen, der größer als seine Zielgruppe ist, liegt ein undefiniertes Verhalten vor. Wird z. B. ein float-Wert in einen short-Wert konvertiert, könnte das zu Problemen führen, denn der float-Wert hat eine Größe von vier Bytes und der short-Wert eine von zwei Bytes. Mit niedrigeren Werten mag dies zufällig funktionieren:

short x;
float z = 25.0;
x = (short) z;

Sollte der Wert von float z. B. »1000000.0« betragen, wird dies nicht mehr gelingen, denn der Wert »1000000« ist nicht mehr mit 16 Bit (= 2 Bytes) darstellbar. Das Gleiche gilt auch für Casts von double nach float oder von long double nach double.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z

 C von A bis Z
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: C/C++






 C/C++


Zum Katalog: Einstieg in C






 Einstieg in C


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de