Intervalli di tipi di dati e relative macro in C++
La maggior parte delle volte nella programmazione competitiva è necessario assegnare alla variabile il valore massimo o minimo che il tipo di dati può contenere, ma ricordare un numero così grande e preciso risulta essere un lavoro difficile. Pertanto il C++ dispone di determinate macro per rappresentare questi numeri in modo che questi possano essere assegnati direttamente alla variabile senza effettivamente digitare l'intero numero.
IL
Diamo un'occhiata ad un esempio:
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 ; }
Produzione
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+38Tipi di dati e relative macro di intervallo
Di seguito è riportato un elenco di alcune macro dei tipi di dati:
| Tipo di dati | Allineare | Macro per valore minimo | Macro per il valore massimo |
|---|---|---|---|
| car | da -128 a +127 | Caratteri_min | CAR_MAX |
| carattere breve | da -128 a +127 | SCAR_MIN | SCAR_MAX |
| carattere non firmato | da 0 a 255 | -- | Volare_max |
| breve int | da -32768 a +32767 | SHRT_MIN | SHRT_MAX |
| int breve senza segno | da 0 a 65535 | -- | USHRT_MAX |
| int | -2147483648 a +2147483647 | INT_MIN | INT_MAX |
| intero senza segno | 0 al 4294967295 | -- | UINT_MAX |
| lungo int | -9223372036854775808 a +9223372036854775807 | LUNGO_MIN | LUNGO_MAX |
| int lungo senza segno | da 0 a 18446744073709551615 | -- | Usong_Max |
| lungo lungo int | -9223372036854775808 a +9223372036854775807 | Spedizione_min | LLONG_MAX |
| senza segno lungo lungo int | da 0 a 18446744073709551615 | -- | ULLONG_MAX |
| galleggiante | da 1.17549e-38 a 3.40282e+38 | Flt_min | FLT_MAX |
| galleggiante (negativo) | Da -1.17549e-38 a -3.40282e+38 | -Lt_min | -FLT_MAX |
| raddoppiare | da 2.22507e-308 a 1.79769e+308 | DBL_MIN | DBL_MAX |
| doppio (negativo) | Da -2,22507e-308 a -1,79769e+308 | -DBL_MIN | -DBL_MAX |
Limiti dei tipi di dati nel C++ moderno
L'approccio macro di cui sopra per i limiti superiore e inferiore del tipo di dati è il vecchio approccio del linguaggio C ereditato da C++. Ma anche il C++ ha il proprio metodo per fornire ai programmatori le stesse informazioni.
Il C++ offre il limiti_numerici <> modello di classe come alternativa moderna a queste macro. Questo modello fornisce un approccio più orientato agli oggetti per accedere ai limiti dei tipi di dati. È definito all'interno del
Diamo un'occhiata ad un esempio:
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 ; }
Produzione
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+38Si consiglia di utilizzare questo approccio per trovare i limiti superiore e inferiore del tipo di dati anziché delle macro poiché è più sicuro e leggibile rispetto all'approccio basato su macro.