Zakresy typów danych i ich makra w C++

W większości przypadków w programowaniu konkurencyjnym istnieje potrzeba przypisania zmiennej maksymalnej lub minimalnej wartości, jaką może pomieścić typ danych, ale zapamiętanie tak dużej i dokładnej liczby okazuje się trudnym zadaniem. Dlatego C++ ma pewne makra reprezentujące te liczby, dzięki czemu można je bezpośrednio przypisać do zmiennej bez konieczności wpisywania całej liczby.

The plik nagłówkowy w C++ definiuje makra, które reprezentują górną i dolną granicę typów danych całkowitych i definiuje makra dla limitów zmiennoprzecinkowych i podwójnych. Te makra umożliwiają łatwe przypisanie tych ekstremalnych wartości do zmiennych bez konieczności ich ręcznego wpisywania.

Rzućmy okiem na przykład:

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      < <     '  n  nshort int ranges from: '      < <     SHRT_MIN       < <     ' to '      < <     SHRT_MAX      < <     endl  ;      cout      < <     '  n  int ranges from: '      < <     INT_MIN      < <     ' to '       < <     INT_MAX      < <     endl  ;      cout      < <     '  n  long int ranges from: '      < <     LONG_MIN      < <     ' to '       < <     LONG_MAX      < <     endl  ;      cout      < <     '  n  float ranges from: '      < <     FLT_MIN      < <     ' to '       < <     FLT_MAX      < <     endl  ;      return     0  ;   }   


Wyjście

 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

Typy danych i ich makra zakresu

Lista niektórych makr typu danych znajduje się poniżej:

Typ danych

Zakres

Makro dla wartości minimalnej

Makro dla wartości maksymalnej

zwęglać

-128 do +127

Char_min

CHAR_MAX

krótki znak

-128 do +127

SCHAR_MIN

SCHAR_MAX

znak bez znaku

0 do 255

--

Latanie_maks

krótki wew

-32768 do +32767

SHRT_MIN

SHRT_MAX

krótki int bez znaku

0 do 65535

--

USHRT_MAX

wew

-2147483648 do +2147483647

INT_MIN

INT_MAX

bez znaku int

0 do 4294967295

--

UINT_MAX

długi wew

-9223372036854775808 do +9223372036854775807

DŁUGIE_MIN

DŁUGIE_MAX

długi int bez znaku

0 do 18446744073709551615

--

Usong_Max

długi długi wew

-9223372036854775808 do +9223372036854775807

Statek_min

LLONG_MAX

bez znaku długi długi int

0 do 18446744073709551615

--

ULLONG_MAX

platforma

1.17549e-38 do 3.40282e+38

Flt_min

FLT_MAX

pływak (ujemny)

-1.17549e-38 do -3.40282e+38

-Lt_min

-FLT_MAX

podwójnie

2.22507e-308 do 1.79769e+308

DBL_MIN

DBL_MAX

podwójne (ujemne)

-2.22507e-308 do -1.79769e+308

-DBL_MIN

-DBL_MAX

Ograniczenia typów danych we współczesnym C++

Powyższe podejście makro dla górnych i dolnych granic typu danych to stare podejście do języka C odziedziczone przez C++. Ale C++ ma również własną metodę dostarczania programistom tych samych informacji.

C++ oferuje limity_numeryczne <> class jako nowoczesna alternatywa dla tych makr. Ten szablon zapewnia bardziej obiektowe podejście do uzyskiwania dostępu do limitów typów danych. Jest zdefiniowany wewnątrz plik nagłówkowy.

Rzućmy okiem na przykład:

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      < <     '  n  int ranges from: '      < <     numeric_limits   <  int  >::  min  ()      < <     ' to '       < <     numeric_limits   <  int  >::  max  ()      < <     endl  ;      cout      < <     '  n  long int ranges from: '      < <     numeric_limits   <  long  >::  min  ()      < <     ' to '       < <     numeric_limits   <  long  >::  max  ()      < <     endl  ;      cout      < <     '  n  float ranges from: '      < <     numeric_limits   <  float  >::  min  ()      < <     ' to '       < <     numeric_limits   <  float  >::  max  ()      < <     endl  ;      return     0  ;   }   


Wyjście

 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

Zaleca się stosowanie tego podejścia do znajdowania górnej i dolnej granicy typu danych zamiast makr, ponieważ jest ono bezpieczniejsze i czytelniejsze w porównaniu z podejściem opartym na makrach.