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?

 1
Author: Yu Hao, 2014-05-17

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 ) para determinar estes valores (código copiado da página de referência acima mencionada).

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

 5
Author: godfatherofpolka, 2017-05-23 12:12:55

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.
 2
Author: MCHAppy, 2014-05-17 12:53:34