Herramientas de usuario

Herramientas del sitio


curso-cpp:mas-tipos

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
curso-cpp:mas-tipos [2017/11/26 22:22]
santo
curso-cpp:mas-tipos [2017/11/26 22:39] (actual)
guty [Tipo de un literal entero]
Línea 41: Línea 41:
 Es decir, las versiones ''​unsigned''​ ocupan la misma memoria que sus correspondientes con signo, no permiten negativos, y a cambio llegan hasta números aproximadamente el doble de grandes como límite superior. La tabla de potencias de diez máximas representables es igual que antes, excepto que en ''​unsigned long long''​ ahora entra el número $10^{19}$, mientras que en ''​long long''​ solo se puede representar hasta $10^{18}$. Es decir, las versiones ''​unsigned''​ ocupan la misma memoria que sus correspondientes con signo, no permiten negativos, y a cambio llegan hasta números aproximadamente el doble de grandes como límite superior. La tabla de potencias de diez máximas representables es igual que antes, excepto que en ''​unsigned long long''​ ahora entra el número $10^{19}$, mientras que en ''​long long''​ solo se puede representar hasta $10^{18}$.
  
-===== Tipo de una literal entero =====+===== Tipo de un literal entero =====
  
 Cuando escribimos un número directamente en el código, como por ejemplo ''​x = y + 33;'',​ cabe preguntarse:​ ¿De qué tamaño es ese 33? Esto es importante para las cuentas intermedias,​ pues ese tipo define el tamaño del resultado. Por ejemplo, si hacemos ''​long long x = y + 1000000000;'',​ donde ''​y''​ es de tipo ''​int'',​ el resultado "​matemático"​ de la cuenta siempre entrará en el rango de ''​long long'',​ pero... ¿Es para la computadora el resultado de la cuenta un ''​long long''?​ Cuando escribimos un número directamente en el código, como por ejemplo ''​x = y + 33;'',​ cabe preguntarse:​ ¿De qué tamaño es ese 33? Esto es importante para las cuentas intermedias,​ pues ese tipo define el tamaño del resultado. Por ejemplo, si hacemos ''​long long x = y + 1000000000;'',​ donde ''​y''​ es de tipo ''​int'',​ el resultado "​matemático"​ de la cuenta siempre entrará en el rango de ''​long long'',​ pero... ¿Es para la computadora el resultado de la cuenta un ''​long long''?​
Línea 53: Línea 53:
 Similar problema tendremos si hacemos ''​long long x = y + z'',​ siendo tanto ''​y''​ como ''​z''​ variables de tipo ''​int''​. Podemos solucionarlo **convirtiendo** una de ellas a ''​long long'':​ ''​long long x = y + (long long)(z)'',​ de forma análoga a lo que hacíamos con el ''​LL''​ para los literales enteros. Similar problema tendremos si hacemos ''​long long x = y + z'',​ siendo tanto ''​y''​ como ''​z''​ variables de tipo ''​int''​. Podemos solucionarlo **convirtiendo** una de ellas a ''​long long'':​ ''​long long x = y + (long long)(z)'',​ de forma análoga a lo que hacíamos con el ''​LL''​ para los literales enteros.
  
-**El caso más común** donde esto ocurre es en la expresión: ''​1 << i''​ (que es común si se trabaja con [[cpp-avanzado:​bitmask|máscaras ​de bits]] de 64 bits): El resultado de esta operación será de tipo ''​int'',​ que no es lo que queremos si estamos trabajando valores de 64 bits. ''​1LL << i''​ resuelve por completo este problema.+**El caso más común** donde esto ocurre es en la expresión: ''​1 << i''​ (que es común si se trabaja con [[cpp-avanzado:​operaciones-de-bits|operaciones ​de bits]] ​con números ​de 64 bits): El resultado de esta operación será de tipo ''​int'',​ que no es lo que queremos si estamos trabajando valores de 64 bits. ''​1LL << i''​ resuelve por completo este problema.
  
 ===== Reglas prácticas para el manejo de tipos enteros ===== ===== Reglas prácticas para el manejo de tipos enteros =====
curso-cpp/mas-tipos.1511734946.txt.gz · Última modificación: 2017/11/26 22:22 por santo