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
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+38Tipos 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
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+38Recomenda-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.