In der kompetitiven Programmierung besteht in den meisten Fällen die Notwendigkeit, der Variablen den maximalen oder minimalen Wert zuzuweisen, den der Datentyp enthalten kann. Es erweist sich jedoch als schwierig, sich eine so große und präzise Zahl zu merken. Daher verfügt C++ über bestimmte Makros zur Darstellung dieser Zahlen, sodass diese direkt der Variablen zugewiesen werden können, ohne dass tatsächlich die gesamte Zahl eingegeben werden muss.
Der
Schauen wir uns ein Beispiel an:
C++#include // for int char macros #include // for float double macros #include using namespace std; int main() { // Displaying ranges with the help of macros cout << 'char ranges from: ' << CHAR_MIN << ' to ' << CHAR_MAX << endl; cout << 'nnshort int ranges from: ' << SHRT_MIN << ' to ' << SHRT_MAX << endl; cout << 'nint ranges from: ' << INT_MIN << ' to ' << INT_MAX << endl; cout << 'nlong int ranges from: ' << LONG_MIN << ' to ' << LONG_MAX << endl; cout << 'nfloat ranges from: ' << FLT_MIN << ' to ' << FLT_MAX << endl; return 0; }
Ausgabe
svm
char ranges from: -128 to 127
nshort int ranges from: -32768 to 32767
int ranges from: -2147483648 to 2147483647
long int ranges from: -9223372036854775808 to 9223372036854775807
float ranges from: 1.17549e-38 to 3.40282e+38
Datentypen und ihre Bereichsmakros
Nachfolgend finden Sie eine Liste einiger Datentypmakros:
Datentyp | Reichweite | Makro für Mindestwert | Makro für Maximalwert |
---|---|---|---|
verkohlen | -128 bis +127 | Char_min | CHAR_MAX |
kurzes Zeichen | -128 bis +127 | SCHAR_MIN | SCHAR_MAX |
unsigniertes Zeichen | 0 bis 255 | -- | Flying_max |
kurze Int | -32768 bis +32767 | SHRT_MIN | SHRT_MAX |
unsigned short int | 0 bis 65535 | -- | USHRT_MAX |
int Arten von Netzwerken | -2147483648 bis +2147483647 | INT_MIN | INT_MAX |
unsigned int | 0 bis 4294967295 | -- | UINT_MAX |
lange int | -9223372036854775808 bis +9223372036854775807 | LONG_MIN | LONG_MAX |
unsigned long int | 0 bis 18446744073709551615 | -- | Usong_Max |
lang lang int | -9223372036854775808 bis +9223372036854775807 | Ship_min | LLONG_MAX |
unsigned long long int | 0 bis 18446744073709551615 | -- | ULLONG_MAX |
schweben | 1.17549e-38 bis 3.40282e+38 | Flt_min | FLT_MAX |
float (negativ) | -1,17549e-38 bis -3,40282e+38 | -Lt_min | -FLT_MAX |
doppelt | 2.22507e-308 bis 1.79769e+308 'prim's Algorithmus' | DBL_MIN | DBL_MAX |
doppelt (negativ) | -2,22507e-308 bis -1,79769e+308 | -DBL_MIN | -DBL_MAX |
Datentypbeschränkungen in modernem C++
Der obige Makroansatz für die Ober- und Untergrenze des Datentyps ist der alte C-Sprachansatz, der von C++ geerbt wurde. Aber auch C++ verfügt über eine eigene Methode, um Programmierern die gleichen Informationen bereitzustellen.
C++ bietet das numerische_limits<> Klassenvorlage als moderne Alternative zu diesen Makros. Diese Vorlage bietet einen objektorientierteren Ansatz für den Zugriff auf Datentypbeschränkungen. Es ist innerhalb der definiert
Schauen wir uns ein Beispiel an:
C++#include #include using namespace std; int main() { // Displaying ranges with the help of macros cout << 'short int ranges from: ' << numeric_limits<short int>::min() << ' to ' << numeric_limits<short int>::max() << endl; cout << 'nint ranges from: ' << numeric_limits<int>::min() << ' to ' << numeric_limits<int>::max() << endl; cout << 'nlong int ranges from: ' << numeric_limits<long>::min() << ' to ' << numeric_limits<long>::max() << endl; cout << 'nfloat ranges from: ' << numeric_limits<float>::min() << ' to ' << numeric_limits<float>::max() << endl; return 0; }
Ausgabe
short int ranges from: -32768 to 32767
int ranges from: -2147483648 to 2147483647
long int ranges from: -9223372036854775808 to 9223372036854775807
float ranges from: 1.17549e-38 to 3.40282e+38
Es wird empfohlen, diesen Ansatz zu verwenden, um die Ober- und Untergrenzen des Datentyps anstelle von Makros zu ermitteln, da er im Vergleich zum makrobasierten Ansatz typsicherer und lesbarer ist.