logo

Datentypbereiche und ihre Makros in C++

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 Die Header-Datei in C++ definiert Makros, die die Ober- und Untergrenzen ganzzahliger Datentypen darstellen und definiert die Makros für Float- und Double-Limits. Mit diesen Makros können Sie diese Extremwerte einfach Variablen zuweisen, ohne sie manuell eintippen zu müssen.



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 Header-Datei.

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.