Datentypen in C++: Wertebereich und Speichergröße
Wie war das gleich mit den Datentypen in C++? Int, long, long long, float, double, long double!
Die Programmiersprache C++ ist wohl die Königsdisziplin unter den Programmiersprachen. Hier ist alles etwas anders und genauer als in anderen Prorammiersprachen. C++ bietet eine Fülle an Datentypen. Insbesondere ist mir der Typ long long aufgefallen. Dieser doppelt soeben mal die Speichergröße einer long-Variable.
Aber auch die Möglichkeit C++ Variablen mit signed und unsigned zu versehen, ist für mich neu. Setzt man das das unsigned Label vor die Variable so nimmt diese nur positive Zahlen auf, dadurch verdoppelt sich dann auch der Wertebereich, da die negativen Zahlenbereiche wegfallen. Signed kann man sich in dem Zusammenhang sparen, denn das ist die Default-Einstellung und bewirkt dass sich der Wertebereich ins negative genauso wie ins positive erstreckt.
Wertebereiche und Speichergrößen von C++ Datentypen
Dabei muss ich noch erwähnen, dass C++ den Datenwert für Integer – je nach Betriebssystem (16, 32 und 64 Bit) – in der Speichergröße anpasst. So ist ein Integerwert in der 16 Bit-Variante so groß wie ein short (16 Bit = 2 Byte) und in der 32 und 64 Bit-Variante so groß wie ein Long (32 Bit = 4 Byte).
C++ Datentyp | Bit-Variante | Minimum kleinster Wert |
Maximum größter Wert |
Speicherplatz |
---|---|---|---|---|
bool (Boolean) | 0 (false) | 1 (true) | 8 Bit, 1 Byte | |
char | -128 | +127 | 8 Bit, 1 Byte | |
unsigned char | 0 | 255 | 8 Bit, 1 Byte | |
int | 16 | -32.768 | +32.767 | 16 Bit, 2 Byte |
unsigned int | 16 | 0 | 65.535 | 16 Bit, 2 Byte |
int | 32 | -2.147.483.648 | +2.147.483.647 | 32 Bit, 4 Byte |
unsigned int | 32 | 0 | 4.294.967.295 | 32 Bit, 4 Byte | int | 64 | -9.223.372.036.854.775.808 | +9.223.372.036.854.775.807 | 64 Bit, 8 Byte |
unsigned int | 64 | 0 | 18.446.744.073.709.551.615 | 64 Bit, 8 Byte |
short | -32.768 | +32.767 | 16 Bit, 2 Byte | |
unsigned short | 0 | 65.535 | 16 Bit, 2 Byte | |
long | -2.147.483.648 | +2.147.483.647 | 32 Bit, 4 Byte | |
unsigned long | 0 | 4.294.967.295 | 32 Bit, 4 Byte | |
long long | -9.223.372.036.854.775.808 | +9.223.372.036.854.775.807 | 64 Bit, 8 Byte | |
unsigned long long | 0 | 18.446.744.073.709.551.615 | 64 Bit, 8 Byte | |
Genauigkeit | ||||
float | 6 Stellen | -3,4E+38 | +3,4E+38 | 32 Bit, 4 Byte |
double | 15 Stellen | -1,7E+308 | +1,7E+308 | 64 Bit, 8 Byte |
long double | 19 Stellen | -1,1E+4932 | +1,1E+4932 | 80 Bit, 10 Byte |
C String, Speichergröße
Ein Sonderfall bildet der Datentyp String. Dieser besteht aus einzelnen Zeichen, jedes dieser Zeichen repräsentiert ein char-Datentyp (ASCII) . Deswegen ergibt sich die Speichergröße aus
Das +1 steht dabei für „\0“ und stellt ein zusätzliches Char-Zeichen (Escape) dar, welches das Variablenende kennzeichnet.
C++ String, Speichergröße
Bei dem C++ String kann man nicht genau sagen wie groß er wird, denn dieser verwaltet intern einen Zähler wie viele Buchstaben der String hält. Jedoch kann man diese Größe ermitteln und zwar mit der std-Methode capacity.
[code language=“c“]
std::string s("Mrknowing");
std::cout << s.capacity() << " Byte" << endl;
[/code]
Source-Code zum bestimmen von maximal, minimal und Speicherwerte in C++ Datentypen
Dabei sollte man bedenken, dass sich der Integerwert an der Bit-Version des auszuführenden Betriebssystems orientiert.
[code language=“c“]
#include <iostream>
using namespace std;
int main()
{
//headline
cout << "Size of Datatyps in C++" << endl;
//boolean
cout << " bool: " << sizeof(bool) << "Byte \t"
<< "Min: " << false << "\t"
<< "Max: " << true << endl;
cout << "\t————-" << endl;
//char
cout << " char: " << sizeof(char) << "Byte \t"
<< "Min: " << CHAR_MIN << "\t"
<< "Max: " << CHAR_MAX << endl;
//unsigned char
cout << " uchar: " << sizeof(unsigned char) << "Byte \t"
<< "Min: " << "0" << "\t"
<< "Max: " << UCHAR_MAX << endl;
cout << "\t————-" << endl;
//int
cout << " int: " << sizeof(int) << "Byte \t"
<< "Min: " << INT_MIN << "\t"
<< "Max: " << INT_MAX << endl;
//unsigned int
cout << " uint: " << sizeof(unsigned int) << "Byte \t"
<< "Min: " << "0" << "\t"
<< "Max: " << UINT_MAX << endl;
cout << "\t————-" << endl;
//short
cout << " short: " << sizeof(short) << "Byte \t"
<< "Min: " << SHRT_MIN << "\t"
<< "Max: " << SHRT_MAX << endl;
//unsigned short
cout << " ushort: " << sizeof(unsigned short) << "Byte \t"
<< "Min: " << "0" << "\t"
<< "Max: " << USHRT_MAX << endl;
cout << "\t————-" << endl;
//long
cout << " long: " << sizeof(long) << "Byte \t"
<< "Min: " << LONG_MIN << "\t"
<< "Max: " << LONG_MAX << endl;
//unsigned long
cout << " ulong: " << sizeof(unsigned long) << "Byte \t"
<< "Min: " << "0" << "\t"
<< "Max: " << ULONG_MAX << endl;
cout << "\t————-" << endl;
//long
cout << " long long: " << sizeof(long long) << "Byte \t"
<< "Min: " << LLONG_MIN << "\t"
<< "Max: " << LLONG_MAX << endl;
//unsigned long
cout << " ulong long: " << sizeof(unsigned long long) << "Byte \t"
<< "Min: " << "0" << "\t"
<< "Max: " << ULLONG_MAX << endl;
cout << "\t————-" << endl;
//float
cout << " float: " << sizeof(float) << "Byte \t"
<< "Min: " << FLT_MIN << "\t"
<< "Max: " << FLT_MAX << endl;
//double
cout << " double: " << sizeof(double) << "Byte \t"
<< "Min: " << DBL_MIN << "\t"
<< "Max: " << DBL_MAX << endl;
//long double
cout << " long double: " << sizeof(long double) << "Byte \t"
<< "Min: " << LDBL_MIN<< "\t"
<< "Max: " << LDBL_MAX << endl;
//Ende
return 0;
}
[/code]
Anhang: Download
Sourcecode download: datetype.ccp datetype.ccp
Neueste Kommentare