logo

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


Wyjście

metoda Java
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

jeśli jeszcze, jeśli jeszcze Java

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

program do dziedziczenia w Pythonie

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


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.