logo

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 file di intestazione in C++ definisce le macro che rappresentano i limiti superiore e inferiore dei tipi di dati interi e definisce le macro per i limiti float e double. Queste macro consentono di assegnare facilmente questi valori estremi alle variabili senza digitarli manualmente.



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


Produzione

Algoritmo kmp
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

Tipi 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

--

come convertire una stringa in un int

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)

inserire la gestione delle eccezioni Java

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 file di intestazione.

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


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+38

Si 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.