Datentypen in C++: Wertebereich und Speichergröße

Share on FacebookShare on Google+Share on LinkedInTweet about this on TwitterShare on TumblrEmail this to someone

Wie war das gleich mit den Datentypen in C++? Int, long, long long, float, double, long double!

Datentypen in C++

Datentypen in C++

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

[Anzahl der Zeichen] * [1 Byte (Char)] + 1 = String-Größe in Byte

Das +1 steht dabei für “\0″ und stellt ein zusätzliches Char-Zeichen (Escape) dar, welches das Variablenende kennzeichnet.

“MRKNOWING” = 10 Byte: “M”,”R”,”K”,”N”,”O”,”W”,”I”,”N”,”G”,”\0″!

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.

std::string s("Mrknowing");
std::cout << s.capacity() << " Byte" << endl;

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.

#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;
}

Anhang: Download

weblink Sourcecode download: datetype.ccp datetype.ccp

Share on FacebookShare on Google+Share on LinkedInTweet about this on TwitterShare on TumblrEmail this to someone

MrKnowing

Programmierer und Wissensnerd! Kontaktiere mich auf Google+ oder einfach per Mail danny@mrknowing.com

You may also like...

Hinterlasse eine Antwort

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

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>