El tamaño de los tipos numéricos no está definido en el estándar C++, aunque sí lo son los tamaños mínimos. La manera de saber qué tamaño son en su plataforma es utilizar numeric limits
Por ejemplo, el valor máximo para un int se puede encontrar:
std::numeric_limits<int>::max();
ordenadores no funcionan en base 10, la cual significa que el valor máximo será en forma de 2 n -1 debido a cómo se representan los números en la memoria. Tomemos, por ejemplo ocho bits (1 byte)
0100 1000
El derecho más bits (número) cuando se pone a 1 representa 2 , el siguiente bit 2 , a continuación, 2 y así sucesivamente hasta llegamos a la parte más a la izquierda, que si el número no está firmado representa 2 .
Así que el número representa 2 + 2 = 64 + 8 = 72, debido a que el cuarto bit de la derecha y el séptimo bit derecho la izquierda están ajustadas.
Si fijamos todos los valores a 1:
11111111
el número es ahora (suponiendo unsigned)
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255 = 2 - 1
Y como podemos ver, ese es el mayor valor posible que se puede representar con 8 bits.
En mi máquina e INT y una larga son los mismos, cada uno capaz de mantener entre -2 a 2 - 1. En mi experiencia, el tamaño más común en la moderna máquina de escritorio de 32 bits.
El título originalmente decía "C/C++" también. – caf
por qué long long int rango positivo == rango negativo –
@mohamedabdallah: Ver el último párrafo de la respuesta: los rangos estándar de C son de esa manera para permitir las representaciones de complemento o de magnitud de signo. – caf