Beruflich Dokumente
Kultur Dokumente
Fotografiere Kulturdenkmale,
hilf der Wikipedia und gewinne!
Ausblenden
Datentypen in C
Zur Navigation springen
Zur Suche springen
C verfügt über die vier arithmetischen Datentypen char, int (beide für ganze
Zahlen), float und double (beide für Kommazahlen). Die Auswahl eines dieser
Datentypen beeinflusst die Größe des reservierten Speichers und die Größe der
darstellbaren Werte. Darüber hinaus sind für die verschiedenen Datentypen
unterschiedliche Operatoren und Funktionen zugelassen.
signed char ≤ short int ≤ int ≤ long int ≤ long long int.
(„≤“ bedeutet dabei, dass der rechts stehende Typ alle Werte des links
stehenden Typs aufnehmen kann.)
Character
Zum Speichern eines Zeichens verwendet man in C den Datentyp Character, geschrieben
als char. Vom Computer tatsächlich gespeichert wird nicht das Zeichen, sondern eine
gleichbedeutende, acht Bit lange, Binärzahl (dadurch ergeben sich 256 verschiedene
Werte, die einem Character zugewiesen werden können). Der Programmierer kann sich
die Binärzahl leicht vom Computer in ein Zeichen oder eine dezimale Ganzzahl
übersetzen lassen. Die Übersetzung einer Zahl in ein Zeichen und umgekehrt
geschieht dabei anhand einer Tabelle (z. B.: ASCII-Tabelle oder EBCDIC).
char zeichen = 'A'; /* intern gespeichert wird nicht der Buchstabe „A“ sondern
* die anhand der ASCII-Tabelle errechnete Binärzahl
„01000001“ */
printf("%d", zeichen); /* gibt „01000001“ als Dezimalzahl aus, also: „65“ */
printf("%c", zeichen); /* gibt „01000001“ als ASCII-Zeichen aus, also: „A“ */
Zum Speichern einer ganzen Zahl verwendet man eine Variable vom Datentyp Integer,
geschrieben als int. Um den Wertebereich eines Integers zu verkleinern oder zu
vergrößern, stellt man ihm einen der Qualifizierer short, long oder long long
voran. Das Schlüsselwort int kann dann auch weggelassen werden, so ist long
gleichbedeutend mit long int. Um zwischen vorzeichenbehafteten und vorzeichenlosen
Ganzzahlen zu wechseln, gibt es die beiden Qualifizierer signed und unsigned. Für
einen vorzeichenbehafteten Integer kann der Qualifizierer aber auch weggelassen
werden, so ist signed int gleichbedeutend mit int.
Die Größe eines Integers ist vom jeweiligen Compiler abhängig, der C-Standard
garantiert aber eine minimale Größe von 16 Bit. Die tatsächliche Größe beträgt
heutzutage (je nach Prozessorarchitektur und Betriebssystem) meist 32 Bit, oft aber
auch schon 64 und manchmal noch 16 Bit. In 16 Bit lassen sich 65536 verschiedene
Werte speichern. Um die Verwendung von negativen Zahlen zu ermöglichen, reicht der
Wertebereich bei 16 Bit gewöhnlich von -32768 bis 32767. Werden keine negativen
Zahlen benötigt, kann der Programmierer mit unsigned int aber einen vorzeichenlosen
Integer verwenden. Bei 16 Bit großen Integern ergibt das einen Wertebereich von 0
bis 65535.
Die tatsächliche Größe eines Integers ist in der Headerdatei <limits.h> abgelegt.
INT_MAX ersetzt der C-Präprozessor beispielsweise durch den Wert, den der Typ int
maximal annehmen kann.
Zahlen mit Nachkommastellen werden in einem der drei Datentypen float, double und
long double gespeichert.
In den meisten C-Implementierungen entsprechen die Datentypen float und double dem
international gültigen Standard für binäre Gleitpunktarithmetiken (IEC 559, im Jahr
1989 aus dem älteren amerikanischen Standard IEEE 754 hervorgegangen). Unter dieser
Annahme implementiert float das „einfach lange Format“, ein double das „doppelt
lange Format“. Dabei umfasst ein float 32 Bit, ein double 64 Bit. doubles sind also
genauer. floats werden aufgrund dieses Umstands nur noch in speziellen Fällen
verwendet. Die Größe von long doubles ist je nach Implementierung unterschiedlich,
ein long double darf aber auf keinen Fall kleiner sein als ein double.
Die genauen Eigenschaften und Wertebereiche auf der benutzten Architektur können
über die Headerdatei <float.h> ermittelt werden.
Komplexe Zahlen
Zusätzlich existieren seit C99 noch drei Gleitkomma-Datentypen für komplexe Zahlen,
welche aus den drei Gleitkommatypen abgeleitet sind: float _Complex, double
_Complex und long double _Complex. Ebenfalls in C99 eingeführt wurden Gleitkomma-
Datentypen für rein imaginäre Zahlen: float _Imaginary, double _Imaginary und long
double _Imaginary.
Bis zum C99-Standard gab es keinen Datentyp zum Speichern eines Wahrheitswerts.
Erst seit 1999 können Variablen als _Bool deklariert werden und einen der beiden
Werte 0 (falsch) oder 1 (wahr) aufnehmen. Die Größe einer _Bool-Variablen ist
plattformabhängig und kann 8 Bit übersteigen. Inkludiert man den Header stdbool.h
kann auch der Alias bool statt _Bool verwendet werden, sowie false und true statt 0
und 1.
_Bool a = 23; /* Alle zugewiesenen Werte ungleich 0, werden von einer _Bool-
Variablen als 1 gespeichert */
#include <stdbool.h>
bool b = false;
void
Der Datentyp void wird im C-Standard als „unvollständiger Typ“ bezeichnet. Man kann
keine Variablen von diesem Typ erzeugen. Verwendet wird void erstens, wenn eine
Funktion keinen Wert zurückgeben soll, zweitens für die Deklarationen einer leeren
Parameterliste für eine Funktion und drittens als Teil des regulären aber anonymen
Datenzeigertyps void*, der Zeiger aller Datentypen (keine Funktionen) aufnehmen
kann.
Datenmodell
Die C-Sprachnorm legt die Größe (und damit den Wertebereich) der einzelnen
Basisdatentypen nicht fest, sondern definiert lediglich Relationen zwischen den
Größen der Basisdatentypen und fordert für jeden Basisdatentyp jeweils
Mindestgrößen. Daraus ergeben sich in der Praxis mehrere
Ausgestaltungsmöglichkeiten, welche man Datenmodell oder auch Programmiermodell
nennt.
Der Datentyp int wird auf einer Plattform in der Regel so festgelegt, dass seine
Größe der natürlichen Datenwortgröße der CPU entspricht. Die Größe der Zeigertypen
richtet sich nach der Größe des Speicherbereichs, der vom Programm aus adressierbar
sein soll. Dieser Speicherbereich kann kleiner, aber auch größer sein, als der von
der CPU-Architektur adressierbare Speicherbereich.
Auf heutigen Architekturen ist ein char meist 8 Bit groß, die anderen Datentypen
müssen somit ein ganzzahliges Vielfaches von 8 Bit groß sein. Damit ergeben sich
folgende mögliche Datenmodelle:
Bits pro Datentyp Datenmodell Datentyp Plattformen (Auswahl)
char short int long long long void*
IP16 8 16 16 32 64 16 MS-DOS im SMALL memory model
LP32 8 16 16 32 64 32 MS-DOS im LARGE memory model
ILP32 8 16 32 32 64 32 die meisten 32-Bit-Betriebssysteme
LLP64 8 16 32 32 64 64 Windows auf x86-64 und IA64
LP64 8 16 32 64 64 64 die meisten unixoiden Betriebssysteme auf
64-Bit-Plattformen
ILP64 8 16 64 64 64 64 SPARC64
SILP64 8 64 64 64 64 64 Unicos (Cray)
Weblinks
Kategorien:
C (Programmiersprache)Datentyp
Navigationsmenü
Nicht angemeldet
Diskussionsseite
Beiträge
Benutzerkonto erstellen
Anmelden
Artikel
Diskussion
Lesen
Bearbeiten
Quelltext bearbeiten
Versionsgeschichte
Suche
Hauptseite
Themenportale
Zufälliger Artikel
Mitmachen
Artikel verbessern
Neuen Artikel anlegen
Autorenportal
Hilfe
Letzte Änderungen
Kontakt
Spenden
Werkzeuge
Drucken/exportieren
Buch erstellen
Als PDF herunterladen
Druckversion
In anderen Sprachen
العربية
English
Français
한국어
Русский
Tiếng Việt
中文
Links bearbeiten
Diese Seite wurde zuletzt am 16. Juli 2020 um 13:07 Uhr bearbeitet.
Abrufstatistik · Autoren
Der Text ist unter der Lizenz „Creative Commons Attribution/Share Alike“
verfügbar; Informationen zu den Urhebern und zum Lizenzstatus eingebundener
Mediendateien (etwa Bilder oder Videos) können im Regelfall durch Anklicken dieser
abgerufen werden. Möglicherweise unterliegen die Inhalte jeweils zusätzlichen
Bedingungen. Durch die Nutzung dieser Website erklären Sie sich mit den
Nutzungsbedingungen und der Datenschutzrichtlinie einverstanden.
Wikipedia® ist eine eingetragene Marke der Wikimedia Foundation Inc.
Datenschutz
Über Wikipedia
Impressum
Mobile Ansicht
Entwickler
Statistiken
Stellungnahme zu Cookies
Wikimedia Foundation
Powered by MediaWiki