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
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
Laten we eens een voorbeeld bekijken:
referentievariabele in JavaC++
#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.