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
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+38Typy 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
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+38Zaleca 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.