[C con Clase] Sobre el punto 'Tipos de variables I' del curso

Steven Davidson srd4121 en njit.edu
Mie Mayo 2 01:57:20 CEST 2012


Hola User,

On 5/1/2012 7:16 PM, User wrote:
> Hola,
>
> Estoy dando un repaso a los temas del curso de C++ y llegado al punto
> de 'Tipos de variables I' hay cosas que no me quedan claras.
>
> Según la sintaxis expuesta en el punto, veo que se pueden declarar
> variables de tipo short int, long int, int, long, short, long long y
> long long int.
>
> No me queda claro en qué caso se debería usar una declaración u otra.
> He programado en C++ y si quiero trabajar con un número entero
> siempre acabo usando int.
>
> Me gustaría, si fuera posible, que pusieráis ejemplos concretos con
> cada uno de los casos y en qué "problemas" o tipo de "no
> optimización" se incurriría al usar un tipo que no se ajuste de
> manera fiel a los datos con los que vamos a trabajar.
>
> Si podéis responder a este correo con un adelanto de lo que pido
> estaría genial.
>

Bueno, como bien dices, uso 'int' cuando necesito un entero. El tipo 
'int' representa el entero con el que más cómodo se siente el 
procesador. Lo que pasa es que hoy día usamos 'int' para 32 bits, aunque 
tengamos plataformas de 64 bits, que se suele representar como 'long 
long int'. En general, usamos 'int' para un entero cualquiera, pero si 
necesitamos o sabemos de antemano el intervalo válido de los enteros a 
tratar, entonces pasaríamos a usar 'short int' o 'long long int', cuando 
sean necesarios.

Por ejemplo, para cronómetros de alta resolución, pasaríamos a usar un 
entero de 64 bits y por tanto sería un 'unsigned long long int'. Si 
estamos usando gráficos, por ahora, las dimensiones de una imagen son de 
la orden de unos centenares o millares de píxeles para las filas y para 
las columnas, como por ejemplo, 1024x768, 1440x900, 2048x2048, 
4096x4096, etc.. Para este caso, usaríamos 'unsigned short int' porque 
no llegamos a los 65536 de los 16 bits que suele ocupar 'unsigned short 
int'. Asimismo, en el modelo RGB de colores, cada canal, rojo, verde, y 
azul, usan 8 bits cada uno, por lo que individualmente se representarían 
con un 'unsigned char'. También es cierto que hay otros modelos de RGB 
que usan 16 bits por cada canal, así que entonces estaríamos ante un uso 
de 'unsigned short int'.

En general, habría que mirar cada caso y si realmente nos sirve usar 
'short int' en lugar de 'int'. Hoy día, 'long int' ocupa lo mismo que 
'int', así que no es muy usado, excepto como indicativo de que queremos 
un entero grande, aunque en la práctica estemos ante un entero "normal".

Como no siempre sabremos exactamente el uso del entero, sugiero usar 
tipos definidos, para que así podamos redefinirlos si las cosas no salen 
bien. Por ejemplo,

typedef unsigned long int dim_t;     // tipo de dimensión
typedef unsigned short int coord_t;  // tipo de coordenada
typedef unsigned char edad_t;        // tipo de edad
typedef long long int crono_t;       // tipo de cronómetro: pulsacions


Espero haber aclarado un poco el tema.

Steven





Más información sobre la lista de distribución Cconclase