Intervalos de tipos de dados e suas macros em C++

Na maioria das vezes, na programação competitiva, há necessidade de atribuir à variável o valor máximo ou mínimo que o tipo de dados pode conter, mas lembrar de um número tão grande e preciso acaba sendo uma tarefa difícil. Portanto, C++ possui certas macros para representar esses números, de modo que possam ser atribuídos diretamente à variável sem realmente digitar o número inteiro.

O arquivo de cabeçalho em C++ define macros que representam os limites superior e inferior de tipos de dados inteiros e define as macros para limites flutuantes e duplos. Essas macros permitem atribuir facilmente esses valores extremos a variáveis ​​sem digitá-los manualmente.

Vejamos um exemplo:

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


Saída

 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

Tipos de dados e suas macros de alcance

Uma lista de algumas macros de tipo de dados é mencionada abaixo:

Tipo de dados

Faixa

Macro para valor mínimo

Macro para valor máximo

personagem

-128 a +127

Char_min

CHAR_MAX

caractere curto

-128 a +127

SCHAR_MIN

SCHAR_MAX

caractere não assinado

0 a 255

--

Voador_max

curto int

-32768 a +32767

SHRT_MIN

SHRT_MAX

int curto não assinado

0 a 65535

--

USHRT_MAX

interno

-2147483648 a +2147483647

INT_MIN

INT_MAX

int não assinado

0 a 4294967295

--

UINT_MAX

longo interno

-9223372036854775808 a +9223372036854775807

LONG_MIN

LONG_MAX

não assinado longo int

0 a 18446744073709551615

--

Usong_Max

muito longo int

-9223372036854775808 a +9223372036854775807

Envio_min

LLONG_MAX

não assinado longo longo int

0 a 18446744073709551615

--

ULLONG_MAX

flutuador

1.17549e-38 a 3.40282e+38

Flt_min

FLT_MAX

flutuante (negativo)

-1,17549e-38 a -3,40282e+38

-Lt_min

-FLT_MAX

dobro

2.22507e-308 a 1.79769e+308

DBL_MIN

DBL_MAX

duplo (negativo)

-2,22507e-308 a -1,79769e+308

-DBL_MIN

-DBL_MAX

Limites de tipo de dados em C++ moderno

A abordagem macro acima para os limites superior e inferior do tipo de dados é a antiga abordagem da linguagem C herdada pelo C++. Mas C++ também tem seu próprio método para fornecer aos programadores as mesmas informações.

C++ oferece a limites_numéricos <> modelo de classe como uma alternativa moderna para essas macros. Este modelo fornece uma abordagem mais orientada a objetos para acessar limites de tipos de dados. É definido dentro do arquivo de cabeçalho.

Vejamos um exemplo:

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


Saída

 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

Recomenda-se usar esta abordagem para encontrar os limites superior e inferior do tipo de dados em vez de macros, pois é mais segura e legível em comparação com a abordagem baseada em macro.