El tipo de variable int permite almacenar números enteros, pero solo puede almacenar números desde -231 hasta 231-1, es decir, el número más pequeño que puede almacenar es el -2.147.483.648 y el número más grande que puede almacenar es el 2.147.483.647.
Si nos pasamos de estos límites el valor pasa al extremo contrario, como si los valores estuvieran en una rueda, por lo que si los cálculos exceden estos límites fallan. Por ejemplo:
int num = 2147483647;
num = num + 1;
cout << num; // Muestra por pantalla -2147483648
En general este rango de valores puede parecer suficiente, pero a veces no es suficiente. Para guardar valores más pequeños y más grandes podemos usar el tipo de variable long. Este tipo de variable puede almacenar desde -263 hasta 263-1, es decir, desde -9.223.372.036.854.775.807 hasta 9.223.372.036.854.775.806.
long num = 2147483647;
num = num * 10000;
cout << num; // Muestra por pantalla 21474836470000
Antiguamente existía un tipo de variable todavía más grande, long long, pero desde la popularización de los procesadores de 64 bits las variables long y long long tienen el mismo tamaño, de manera que no hay diferencia entre usar uno o el otro (de igual manera que también podemos usar long int y es lo mismo que long, y otras combinaciones similares).
Las variables unsigned descartan la parte negativa, es decir, solo pueden almacenar valores positivos. Es duplica la capacidad de valores, siempre y cuando nunca vayamos a necesitar almacenar un valor negativo en esa variable. De esta manera, unsigned (o unsigned int) puede almacenar valores desde 0 hasta 4.294.967.295, y unsigned long puede almacenar valores desde 0 hasta 18.446.744.073.709.551.615.
Un detalle importante es entender cómo funciona C++ a la hora de decidir el tamaño de los resultados de operaciones. Si todas las variables (o valores literales) son de tipo int, calculará el resultado almacenándolo en un tamaño de int, aunque el resultado no quepa. Por ejemplo:
int a = 10000000;
int b = 10000000;
cout << a * b;
Dará como resultado un valor erróneo porque las dos variables de la operación son de tipo int, de manera que el resultado se calculará como int, pero no cabe en un int. En cambio:
int a = 10000000;
long b = 10000000;
cout << a * b;
Mostrará el resultado correctamente, ya que al haber un valor long en la operación el resultado se calculará como long.
Es muy recomendable leer la sección "Modificar tipos de variables y valores (cast)" del artículo C++ Trucos.
Añadir nuevo comentario