Intervalele de tip de date și macro -urile lor în C ++

De cele mai multe ori, în programarea competitivă, este necesar să se atribuie variabila valoarea maximă sau minimă pe care tipul de date o poate deține, dar amintirea unui număr atât de mare și precis apare pentru a fi o muncă dificilă. Prin urmare, C ++ are anumite macro -uri pentru a reprezenta aceste numere, astfel încât acestea să poată fi atribuite direct variabilei fără a tasta efectiv numărul întreg.

Fișierul antet din C ++ definește macro -urile care reprezintă limitele superioare și inferioare ale tipurilor de date întregi și Definește macro -urile pentru plutitoare și limite duble. Aceste macro -uri vă permit să atribuiți cu ușurință aceste valori extreme variabilelor fără a le tasta manual.

Să aruncăm o privire la un exemplu:

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


Ieșire

 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

Tipuri de date și macro -urile lor de gamă

O listă cu unele dintre macro -urile de tip de date este menționată mai jos:

Tip de date

Gamă

Macro pentru valoare min

Macro pentru valoare maximă

char

-128 până la +127

Char_min

Char_max

Scurt Char

-128 până la +127

Schar_min

Schar_max

Char nesemnat

0 până la 255

-

Flying_max

scurt int

-32768 până la +32767

Shrt_min

Shrt_max

Nesemnat scurt int

0 la 65535

-

Ushrt_max

int

-2147483648 la +2147483647

Int_min

Int_max

nesemnat int

0 până la 4294967295

-

Uint_max

lung int

-9223372036854775808 până la +9223372036854775807

Long_min

Long_max

nesemnat lung int

0 la 18446744073709551615

-

Usong_max

lung lung

-9223372036854775808 până la +9223372036854775807

Ship_min

Llong_max

nesemnat lung lung

0 la 18446744073709551615

-

Ullong_max

plutitor

1.17549E-38 la 3.40282E+38

Flt_min

Flt_max

float (negativ)

-1.17549E -38 până la -3.40282e+38

-Lt_min

-Flt_max

dubla

2.22507E-308 la 1.79769e+308

Dbl_min

Dbl_max

dublu (negativ)

-2.222507E -308 până la -1.79769e+308

-Dbl_min

-Dbl_max

Limite de tip de date în C ++ modern

Abordarea macro de mai sus pentru limitele superioare și inferioare ale tipului de date este vechea abordare a limbajului C moștenită de C ++. Dar C ++ are și propria metodă de a oferi programatorilor aceleași informații.

C ++ oferă numeric_limits <> Șablonul de clasă ca o alternativă modernă la aceste macro -uri. Acest șablon oferă o abordare mai orientată pe obiecte pentru accesarea limitelor de tip de date. Este definit în interiorul fișier antet.

Să aruncăm o privire la un exemplu:

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


Ieșire

 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

Se recomandă utilizarea acestei abordări pentru a găsi limitele superioare și inferioare ale tipului de date în loc de macro-uri, deoarece este mai sigur de tip și citit în comparație cu abordarea bazată pe macro.