Wissenschaft

#Programmieren Teil 7 – Datentypen und Arrays – Von Bits und Bytes

Programmieren Teil 7 – Datentypen und Arrays – Von Bits und Bytes

Im letzten, eher technischen Artikel ging es um den Stack und wie er genutzt wird, um Funktionen, Funktionsaufrufe und Variablendeklarationen abzubilden; bisher können wir primär allerdings nur ganze Zahlen darstellen. Heute wollen wir darauf aufbauend uns wieder der konkreten Programmierung mit C++ zuwenden und besprechen, wie sich auch andere und komplexere Daten darstellen lassen.

Wie wir in einem früheren Artikel besprochen haben, muss bei der Deklaration von Variablen in C++ immer auch ihr Wertebereich – der Datentyp – mit angegeben werden. Das hat 2 wichtige Gründe: erstens kann so der Compiler an Hand des Datentyps abschätzen, wie viel Speicherplatz eine Variable auf dem Stack benötigt und entsprechenden Code generieren (nicht jeder Typ braucht 4 Byte) und zweitens kann der Compiler überprüfen, ob nur sinnvolle Operationen im Programm ausgeführt werden – einer ganzen Zahl eine Zeichenkette zuweisen ist nicht sinnvoll und kann durch den Compiler so ausgeschlossen werden.

Bisher kennen wir lediglich den Datentyp der ganzen Zahlen, bei der Variablendeklaration mit int markiert. Üblicherweise werden für ganze Zahlen 4 Byte, also 32 Bit benutzt; damit lassen sich insgesamt 232, also 4.294.967.296 verschiedene Zahlen darstellen (und bevor entsprechende Kommentare kommen: ja, int ist nicht auf 32 Bit im C++-Standard festgelegt und kann auch andere Größen annehmen; oft sind es jedoch 32 Bit), je zur Hälfte positive und negative, mit −2.147.483.648 als der kleinsten und 2.147.483.647 als der größten Zahl.

Daneben existieren in C++ noch weitere, fest eingebaute Datentypen zur Speicherung von Informationen; die folgende Tabelle gibt einen Überblick über die entsprechenden Schlüsselwörter, die zur Deklaration genutzt werden können, zusammen mit den typischerweise auf aktuellen Systemen für den jeweiligen Datentyp gültigen Wertebereichen (die Tabelle ist nicht erschöpfend, umfasst aber die wichtigsten Typen) und der Anzahl der Bytes, die zur Darstellung der Werte verwendet wird (der Bitbreite, falls der Wert in Bit angegeben wird). Zu beachten ist: die Wertebereiche sind (abgesehen von char, welches immer 1 Byte groß ist) lediglich gängige Werte in der C++-Welt; sie sind nicht durch den C++-Standard festgelegt und können zwischen Betriebssystemen und Compilern variieren – lediglich ihre Reihenfolge ist standardisiert (bei den Zahlen gehe ich davon aus, dass 1 Byte 8 Bit entspricht – auf den meisten Systemen ist das auch so).

Typ Bytes Minimum Maximum
bool 1 0 (falsch) 1 (wahr)
char 1 -128 127
short 2 -32.768 32.767
int 4 -2.147.483.648 2.147.483.647
long 4 -2.147.483.648 2.147.483.647
long long 8 -9.223.372.036.854.775.808 9.223.372.036.854.775.807
float 4 -3,40282 * 1038 3,40282 * 1038
double 8 -1,79769 * 10308 1,79769 * 10308

Der Typ bool dient zur Darstellung von Wahrheitswerten; historisch bedingt unterscheidet C++ allerdings nicht zwischen Zahlen und Wahrheitswerten, weswegen an eine Variable vom Typ bool neben den speziellen (Wahrheits-)Werten true und false auch Zahlen zugewiesen werden können

Neben den hier genannten Typen gibt es von den meisten Typen auch noch eine Variante mit gleicher Bitbreite, allerdings ohne Vorzeichen, sprich, mit einem Wertebereich ausschließlich im Bereich der positiven Zahlen. Diese Datentypen werden einfach mit dem vorangestellten Schlüsselwort unsigned gekennzeichnet und haben üblicherweise die folgenden Wertebereiche (der Minimalwert ist natürlich immer 0):

Typ Bytes Maximum
unsigned char 1 255
unsigned short 2 65.535
unsigned int 4 4.294.967.295
unsigned long 4 4.294.967.295
unsigned long long 8 18.446.744.073.709.551.615

Wollen wir also eine Variable deklarieren, die eine Zahl im Bereich von 0 bis 255 aufnehmen kann, so schreiben wir (der Variablenname kann natürlich frei gewählt werden):

unsigned char c;

Eine natürliche Zahl wird so deklariert:

unsigned int i;

Für eine reelle Zahl einfacher Genauigkeit schreiben wir

float f;

Und für eine reelle Zahl doppelter Genauigkeit entsprechend:

double d;

Der für die einzelnen Variablen auf dem Stack reservierte Speicher hängt dabei von verschiedenen Faktoren ab, unter anderem natürlich von der Bitbreite, aber auch von diversen Einstellungen des Compilers, die hier aber erst einmal nicht näher diskutiert werden sollen.

Wenn Sie an Foren interessiert sind, können Sie Forum.BuradaBiliyorum.Com besuchen.

Wenn Sie weitere Nachrichten lesen möchten, können Sie unsere Wissenschaft kategorie besuchen.

Quelle

Ähnliche Artikel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Schaltfläche "Zurück zum Anfang"
Schließen

Please allow ads on our site

Please consider supporting us by disabling your ad blocker!