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.