Valor máximo que pode ser armazenado num tipo inteiro em C++
tenho o seguinte programa em C++
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <limits>
using namespace std;
int main()
{
printf("range of int: %d to %d", SHRT_MIN, SHRT_MAX);
int a = 1000006;
printf("\n Integer a is equal to %d", a);
return 0;
}
a minha pergunta é: como é que a
é capaz de armazenar um inteiro maior do que o limite máximo?
2 answers
Consulte http://en.cppreference.com/w/cpp/header/climits e http://en.cppreference.com/w/cpp/types/numeric_limits
SHRT_MAX
is the maximum value for an object of type short int
, but a
is of type int
, so the appropriate constant would be INT_MAX
. Um valor usual para isso em sistemas de 32 bits seria 32767 (21⁵-1). Você provavelmente tem um sistema de 64 bits, onde 2147483647 (231-1 ) pode ser o limite superior.
Também, como indicado em um comentário acima, você pode também querer correr
#include <limits>
#include <iostream>
int main() {
std::cout << "type\tlowest\thighest\n";
std::cout << "int\t"
<< std::numeric_limits<int>::lowest() << '\t'
<< std::numeric_limits<int>::max() << '\n';
return 0;
}
Em alguns casos (Ver INT_[MIN|MAX] limit macros vs numeric_limits
Numa nota lateral, se, por alguma razão, a largura dos tipos inteiros for relevante para o seu código, Poderá também considerar olhar para http://en.cppreference.com/w/cpp/types/integer e http://en.cppreference.com/w/cpp/header/cstdint para um número inteiro de Largura Fixa tipos (Ver também existe alguma razão para não usar tipos inteiros de largura fixa (por exemplo, uint8_t)? para uma discussão).
Uma variável de tipo inteiro é uma variável que só pode conter números inteiros (eg. -2, -1, 0, 1, 2). C++ na verdade tem quatro variáveis inteiros diferentes disponíveis para uso: char, short, int e long. A única diferença entre estes diferentes tipos inteiros é que eles têm tamanhos variados
A sua variável é do tipo int (não curto)
Valor mínimo para uma variável de tipo curto.
SHRT_MIN
–32768
Valor máximo para uma variável do tipo short.
SHRT_MAX
32767
Valor mínimo para uma variável do tipo int.
INT_MIN
–2147483647 – 1
Valor máximo para uma variável do tipo int.
INT_MAX
2147483647
E a
é capaz de armazenar 1000006
, porque
a = 1000006 < 2147483647
Então não há problema.