logo

Gegevenstypebereiken en hun macro's in C++

Bij competitief programmeren is het meestal nodig om aan de variabele de maximale of minimale waarde toe te wijzen die het gegevenstype kan bevatten, maar het onthouden van zo'n groot en nauwkeurig getal blijkt een lastige klus. Daarom heeft C++ bepaalde macro's om deze getallen weer te geven, zodat deze direct aan de variabele kunnen worden toegewezen zonder daadwerkelijk het hele getal te typen.

De header-bestand in C++ definieert macro's die de boven- en ondergrenzen van integer-gegevenstypen vertegenwoordigen en definieert de macro's voor float- en dubbele limieten. Met deze macro's kunt u deze extreme waarden eenvoudig aan variabelen toewijzen zonder ze handmatig uit te typen.



Laten we eens een voorbeeld bekijken:

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


Uitvoer

hoe je een array in Java maakt
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

Gegevenstypen en hun bereikmacro's

Hieronder vindt u een lijst met enkele gegevenstypemacro's:



Gegevenstype

Bereik

Macro voor minimale waarde



Macro voor maximale waarde

verkoold

-128 tot +127

Char_min

CHAR_MAX

korte char

-128 tot +127

SCHAR_MIN

SCHAR_MAX

niet-ondertekend teken

0 tot 255

--

Vliegen_max

korte int

-32768 tot +32767

SHRT_MIN

SHRT_MAX

niet-ondertekende korte int

0 tot 65535

--

USHRT_MAX

int

-2147483648 tot +2147483647

INT_MIN

INT_MAX

niet ondertekend int

0 tot 4294967295

--

UINT_MAX

lang int

-9223372036854775808 tot +9223372036854775807

LONG_MIN

LONG_MAX

niet-ondertekend lange int

0 tot 18446744073709551615

--

Gebruiksong_Max

lang lang int

-9223372036854775808 tot +9223372036854775807

Verzendmin

subtekenreeks in Java

LLONG_MAX

niet ondertekend lang lang int

0 tot 18446744073709551615

--

ULLONG_MAX

vlot

1,17549e-38 tot 3,40282e+38

Flt_min

FLT_MAX

zweven (negatief)

-1,17549e-38 tot -3,40282e+38

-Lt_min

-FLT_MAX

dubbele

2.22507e-308 tot 1.79769e+308

DBL_MIN

DBL_MAX

dubbel (negatief)

-2,22507e-308 tot -1,79769e+308

-DBL_MIN

-DBL_MAX

Limieten voor gegevenstypen in modern C++

De bovenstaande macrobenadering voor de boven- en ondergrenzen van het gegevenstype is de oude C-taalbenadering, geërfd door C++. Maar C++ heeft ook zijn eigen methode om programmeurs van dezelfde informatie te voorzien.

C++ biedt de numerieke_limieten<> class-sjabloon als een modern alternatief voor deze macro's. Deze sjabloon biedt een meer objectgeoriënteerde benadering voor toegang tot gegevenstypelimieten. Het wordt gedefinieerd binnen de header-bestand.

Laten we eens een voorbeeld bekijken:

referentievariabele in Java
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; } 


Uitvoer

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

Het wordt aanbevolen om deze aanpak te gebruiken om de boven- en ondergrenzen van het gegevenstype te vinden in plaats van macro's, omdat deze veiliger en leesbaarder zijn in vergelijking met de op macro's gebaseerde aanpak.