Vous êtes sur la page 1sur 35

TIPOS DE DATOS

Adolfo C. Jimnez Ch.


2014
INTEGER
Los diversos tipos de enteros de C ++ se diferencian en
la cantidad de memoria que utilizan para mantener un
nmero entero.

A mayor bloque de memoria puede representar un rango
ms amplio de valores enteros.
Tipos enteros short, int, y long
La memoria del ordenador se compone de unidades
llamadas bits.

Se usa diferentes nmeros de bits para almacenar los
valores de los tipos short, int, y long que tienen
diferentes anchos.

Un entero short es por lo menos 16 bits de ancho.
Un entero int es al menos tan grande como short.
Un entero long es de al menos 32 bits de ancho y al menos
tan grande como int.

BITS AND BYTES
La unidad fundamental de la memoria es el bit. Un bit
puede ser 0 o 1.
Un trozo de 8 bits de memoria se puede representar de
256 combinaciones diferentes.
Cada celda puede tener dos posibles valores (0 1).



Podemos tener 256 combinaciones posibles con 8 bits.
Cada bit adicional duplica el nmero de combinaciones.
Muchos sistemas actualmente manejan 32, 64, 128 bits,, esto deja las
opciones abiertas para int en el ancho.
bit bit bit bit bit bit bit bit
0/1 0/1 0/1 0/1 0/1 0/1 0/1 0/1
2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 = 256
BITS AND BYTES
En el sistema donde realizo
los ejercicios es el mostrado
en la figura (32 bits).

Veamos un ejemplo de cmo
trabaja en mi sistema de 32
bits los tipos mencionados.

Para ello se har uso del
operador sizeof.

Operador sizeof
El operador sizeof determina el nmero de bytes que se
utiliza para almacenar una variable particular o tipos de
datos. As, cuando se aplica a una variable sizeof devuelve
el tamao del objeto referenciado, y cuando se aplica a
una clase, sizeof devuelve el tamao total del objeto de
esa clase.
CABECERA climits
La cabecera climits (limist.h para sistemas antiguos)
contiene informacin acerca de los lmites de un entero.

Por ejemplo, se define INT_MAX como el mayor valor
posible de un int y CHAR_BIT como el nmero de bits
en un byte.
CABECERA climits (cont..)
Ejemplo, ejecutado con el compilador Dev C++:
CABECERA limits.h (cont..)
Ejecutando el mismo programa con algunas variaciones en
Borland C versin 3.1, tendremos el siguiente resultado:
CONSTANTES SIMBOLICAS de climits
CHAR_BIT
CHAR_MAX
SCHAR_MAX
SCHAR_MIN
UCHAR_MAX
SHRT_MAX
SHRT_MIN
USHRT_MAX
UINT_MAX
LONG_MAX
LONG_MIN
ULONG_MAX
TIPOS unsigned
Cada uno de los tres tipos vistos tienen una variedad sin
signo (unsigned).

Esto tiene la ventaja de incrementar el mayor valor de la
variable.

Ejem: Si short se representa entre el rango -32768 y
32767, la versin sin signo (unsigned) puede
representarse en el rango de 0 a 65535.
TIPOS unsigned
A continuacin se muestra el uso de los tipos sin signo.
Adems, muestra lo que podra suceder si se va ms all
de los lmites de los tipos enteros.
TIPOS unsigned (cont..)

COMPORTAMIENTO DE
DESBORDAMIENTO TPICO ENTEROS

RECOMENDACIN
Por portabilidad use long para enteros grandes (int). Vea
el siguiente grfico en dos computadoras diferentes para
el siguiente cdigo.
CONSTANTES ENTERAS
Una constante entera es la que se escribe de forma
explcita como 212 o 1879.
C++ al igual que C, permite escribir enteros en tres (3)
diferentes bases numricas:

1. Base 10 (favorito del pblico)
2. base 8 (la antigua favorita de Unix) y
3. Base 16 (favorito de los hackers de hardware).

CONSTANTES ENTERAS (cont..)
C++ usa el primer o segundo dgito para identificar la
base de un nmero constante.
Si el primer dgito esta en el rango 1-9, el nmero es en
base 10(decimal); por lo que 93 est en base 10.
Si el primer dgito es 0 y el segundo dgito est en el
rango 1-7 el nmero es en base 8(octal); por lo que 042
es octal e igual a 34 decimal.
Si los dos primeros dgitos son 0x o 0X, el nmero es en
base 16(hexadecimal); por lo que 0x42 es hexadecimal e
igual a 66 decimal. Para los valores hexadecimales los
valores a-f o A-F corresponden a los valores 10-15.
0xF es 15 y 0xA5 es 165.


CONSTANTES ENTERAS (cont..)
Ejemplo: Las variables son almacenadas de la misma
forma en el computador (sistema binario).
CONSTANTES ENTERAS (cont..)
Pero si algunas veces deseamos mostrar un valor en
formato hexadecimal u octal, podemos usar las
caractersticas especiales de cout.
As como la cabecera iostream proporciona el
manipulador endl; del mismo modo proporciona los
siguientes manipuladores para mostrar en sus tres
formatos:
1. dec
2. hex y
3. oct

CONSTANTES ENTERAS (cont..)
Ejemplo:
Note la forma de uso de los manipuladores (en azul).
EL CALIFICADOR const
Si deseamos una constante simblica para los meses del
ao, tendramos la siguiente lnea de cdigo:

const int MONTHS = 12;
MONTHS es una constante simblica para 12.

Una vez definido una constante simblica, el compilador
no puede cambiar el valor de MONTHS.

Una buena prctica es definirlas con maysculas.
NMEROS FLOATING-POINT
C++ tiene dos formas de escribir los nmeros en coma
flotante.
El primero es utilizando la natacin estndar punto
decimal.
12.34 // floating-point
939001.32 // floating-point
0.00023 // floating-point
8.0 // sigue siendo floating-point

NMEROS FLOATING-POINT (cont..)
El segundo mtodo es el llamado Notacin E para
representar los nmeros floating-point.
Sea la siguiente notacin 3.45E6. Este valor 3.45 es
multiplicado por 1,000,000; el E6 indica 10 a la sexta
potencia.
2.52e+8 // puede usar E or e, + is opcional
8.33E-4 // el exponente puede ser negativo
7E5 // es lo mismo 7.0E+05
-18.32e13 // puede tener el signo + or - en frente
7.123e12 // U.S. deuda pblica a principios del 2004
5.98E24 // masa de la tierra en kilogramos
9.11e-31 // masa de un electrn en kilogramos
NMEROS FLOATING-POINT (cont..)

Booleano
Representa los valores lgicos cierto y falso.
bool hace_sol = true;
bool tengo_coche = false;

Se utiliza para representar el resultado de operaciones
lgicas (segn el lgebra de Bool) y de comparacin:

bool vamos_excursion = hace_sol && tengo_coche;
bool resultado = a > b;
Clase string
El estndar ISO/ANSI C++ amplia la librera C++
adicionando una clase string.

Ahora en lugar de utilizar una matriz de caracteres para
almacenar una cadena, podemos utilizar una variable de
tipo string.

Esta clase es parte del espacio de nombres (namespace)
std.
Clase string (cont..)
Podemos hacer referencia a dicha clase de la siguiente
forma using std::string.

Clase string (cont..)

Clase string (cont..)
Ejemplo de concatenacin y tamao de una variable de
tipo string.
Conversin de tipos
Qu pasa cuando combinamos tipos diferentes?
int y float
int y bool
float y double
Los rangos de las variables de mayor a menor se ordenan
del siguiente modo:
long double > double > float > unsigned long > long >
unsigned int > int > unsigned short > short > char
Existen 2 mecanismos:
Conversin automtica
Conversin explcita
Conversin automtica
La hace automticamente el compilador.
Es segura siempre que sepamos que la conversin que va
a hacer el compilador es la que nos interesa.
Promocin
De un tipo menor a un tipo mayor
float valor = 2; // 2 se convierte en 2.0
Degradacin
int valor = 2.2; // 2.2 se convierte en 2
Conversin explcita de tipo
Casting: mecanismo para explicitar el cambio de tipo de
una expresin o variable.
Existen 2 formas:
Castings de C:
(tipo)variable
tipo(variable)
Castings de C++:
static_cast
dynamic_cast
const_cast
reinterpret_cast
Ejemplos de conversin de tipos

float f = 65.2;
float g = ( int ) 65.2; // g vale 65.0
float h = 3/2; // h vale 1.0
float i = ( float )3/( float)2; // i vale 1.5
float k = static_cast<int >(65.2); // k = 65.0
Conversin de bool
Las expresiones condicionales o booleanas, se convierten
automticamente utilizando las siguiente normas:

Si la expresin vale 0, entonces es falso, si no, es cierto.
Los valores booleanos true y false se convierten en 1 y
0 cuando se hace el casting a int.
Para pasar de int a bool se sigue la misma norma que para
las expresiones:
0 es false y el resto de enteros true.
Ejemplo:
Escriba un programa que pida al usuario que ingrese el
nmero de segundos como un valor entero y luego
muestre su equivalente en das, minutos y segundos.
Use constantes simblicas que representen el nmero de
horas en un da, el nmero de minutos en una hora y el
nmero de segundos en un minuto.

Ejemplo:
Ingrese nmero de segundos: 31600000
31600000 segundos = 365 das, 46 minutos y 40 segundos.