El tamaño de los tipos numéricos no está definido en el estándar C ++, aunque los tamaños mínimos sí lo están. La forma de saber qué tamaño tienen en su plataforma es usar límites numéricos
Por ejemplo, el valor máximo de un int se puede encontrar mediante:
std::numeric_limits<int>::max();
Las computadoras no funcionan en base 10, lo que significa que el valor máximo estará en la 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 bit (número) más a la derecha cuando se establece en 1 representa 2 0 , el siguiente bit 2 1 , luego 2 2 y así sucesivamente hasta que lleguemos al bit más a la izquierda, que si el número no tiene signo representa 2 7 .
Entonces, el número representa 2 6 + 2 3 = 64 + 8 = 72, porque el cuarto bit de la derecha y el séptimo bit de la derecha a la izquierda están establecidos.
Si establecemos todos los valores en 1:
11111111
El número ahora es (asumiendo que no tiene signo )
128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255 = 2 8 - 1
Y como podemos ver, ese es el valor más grande posible que se puede representar con 8 bits.
En mi máquina, int y a long son iguales, cada uno capaz de contener entre -2 31 a 2 31 - 1. En mi experiencia, el tamaño más común en la máquina de escritorio moderna de 32 bits.