Muestra las diferencias entre dos versiones de la página.
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 1019, mientras que en ''long long'' solo se puede representar hasta 1018. | 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 1019, mientras que en ''long long'' solo se puede representar hasta 1018. | ||
- | ===== 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 ===== |