| Tipos b�sicos de variables. Los tipos de datos b�sicos definidos por C son caracteres, n�meros enteros y n�meros en coma flotante. Los caracteres son representados por char, los enteros por short, int, long y los n�meros en coma flotante por float y double. Los tipos b�sicos disponibles y su tama�o son: Tipos de datos b�sicos Tabla 2.1: Tipos de datos b�sicos Tipo Rango de valores char -128 a 127 signed char -128 a 127 unsigned char 0 a 255 short o short int -32768 a 32767 signed short -32768 a 32767 unsigned short 0 a 65535 long o long int -2147483648 a 2147483647 signed long -2147483648 a 2147483647 unsigned long 0 a 4294967295 int (16 bits) -32768 a 32767 signed int (16bits) -32768 a 32767 unsigned int (16 bits) 0 a 65535 int (32 bits) -2147483648 a 2147483647 signed int (32 bits) -2147483648 a 2147483647 unsigned int (32 bits) 0 a 4294967295 float -3.402823466E + 38 a 3.402823466E + 38 double -1.7976931348623158E + 308 a 1.7976931348623158E + 308 La palabra unsigned en realidad es un modificador aplicable a tipos enteros, aunque si no se especifica un tipo se supone int. Un modificador es una palabra clave de C que indica que una variable, o funci�n, no se comporta de la forma normal. Hay tambi�n un modificador signed, pero como los tipos son por defecto con signo, casi no se utiliza. |
| Tipos de variables Una variable es un espacio reservado en el ordenador para contener valores que pueden cambiar durante la ejecuci�n de un programa. Los tipos determinan c�mo se manipular� la informaci�n contenida en esas variables. No olvides, si es que ya lo sab�as, que la informaci�n en el interior de la memoria del ordenador es siempre binaria, al menos a un cierto nivel. El modo en que se interpreta la informaci�n almacenada en la memoria de un ordenador es siempre arbitraria, es decir, el mismo valor puede usarse para codificar una letra, un n�mero, una instrucci�n de programa, etc. El tipo nos dice a nosotros y al compilador c�mo debe interpretarse y manipularse la informaci�n binaria almacenada en la memoria de un ordenador. De momento s�lo veremos los tipos fundamentales, que son: void, char, int, float y double, en C++ se incluye tambi�n el tipo bool. Tambi�n existen ciertos modificadores, que permiten ajustar ligeramente ciertas propiedades de cada tipo; los modificadores pueden ser: short, long, signed y unsigned o combinaciones de ellos. Tambi�n veremos en este cap�tulo los tipos enumerados, enum. Tipos fundamentales En C s�lo existen cinco tipos fundamentales y los tipos enumerados, C++ a�ade un s�ptimo tipo, el bool, y el resto de los tipos son derivados de ellos. Los veremos uno por uno, y veremos c�mo les afectan cada uno de los modificadores. Las definiciones de sintaxis de C++ se escribir�n usando el color verde. Los valores entre [] son opcionales, los valores separados con | indican que s�lo debe escogerse uno de los valores. Los valores entre <> indican que debe escribirse obligatoriamente un texto que se usar� como el concepto que se escribe en su interior. [signed|unsigned] char <identificador> significa que se puede usar signed o unsigned, o ninguna de las dos, ya que ambas est�n entre []. Adem�s debe escribirse un texto, que debe ser una �nica palabra que actuar� como identificador o nombre de la variable. Este identificador lo usaremos para referirnos a la variable durante el programa. Ser�n v�lidos estos ejemplos: signed char Cuenta unsigned char letras char caracter Tipo "char" o car�cter: [signed|unsigned] char <identificador> Es el tipo b�sico alfanum�rico, es decir que puede contener un car�cter, un d�gito num�rico o un signo de puntuaci�n. Desde el punto de vista del ordenador, todos esos valores son caracteres. En C y C++ este tipo siempre contiene un �nico car�cter del c�digo ASCII. El tama�o de memoria es de 1 byte u octeto. Hay que notar que en C un car�cter es tratado en todo como un n�mero, de hecho puede ser declarado con y sin signo. Y si no se especifica el modificador de signo, se asume que es con signo. Este tipo de variables es apto para almacenar n�meros peque�os, como los dedos que tiene una persona, o letras, como la inicial de mi nombre de pila. Tipo "int" o entero: [signed|unsigned] [short|long] int <identificador> [signed|unsigned] long [int] <identificador> [signed|unsigned] short [int] <identificador> Las variables enteras almacenan n�meros enteros dentro de los l�mites de su tama�o, a su vez, ese tama�o depende de la plataforma del compilador, y del n�mero de bits que use por palabra de memoria: 8, 16, 23... No hay reglas fijas para saber el mayor n�mero que podemos almacenar en cada tipo: int, long int o short int; depende en gran medida del compilador y del ordenador. S�lo podemos estar seguros de que ese n�mero en short int es menor o igual que en int, y �ste a su vez es menor o igual que en long int. Veremos c�mo averiguar estos valores cuando estudiemos los operadores. Este tipo de variables es �til para almacenar n�meros relativamente grandes, pero sin decimales, por ejemplo el dinero que tienes en el banco, salvo que seas Bill Gates, o el n�mero de lentejas que hay en un kilo de lentejas. Tipo "float" o coma flotante: float <identificador> Las variables de este tipo almacenan n�meros en formato de coma flotante, mantisa y exponente, para entendernos, son n�meros con decimales. Son aptos para variables de tipo real, como por ejemplo el cambio entre euros y pesetas. O para n�meros muy grandes, como la producci�n mundial de trigo, contada en granos. El fuerte de estos n�meros no es la precisi�n, sino el orden de magnitud, es decir lo grande o peque�o que es el n�mero que contiene. Por ejemplo, la siguiente cadena de operaciones no dar� el resultado correcto: float a = 12335545621232154; a = a + 1; a = a - 12335545621232154; Finalmente, "a" valdr� 0 y no 1, como ser�a de esperar. Los formatos en coma flotante sacrifican precisi�n en favor de tama�o. Sin embargo el ejemplo si funcionar�a con n�meros m�s peque�os. Esto hace que las variables de tipo float no sean muy adecuadas para los bucles, como veremos m�s adelante. Puede que te preguntes (alguien me lo ha preguntado), qu� utilidad tiene algo tan impreciso. La respuesta es: aquella que tu, como programador, le encuentres. Te aseguro que float se usa muy a menudo. Por ejemplo, para trabajar con temperaturas, la precisi�n es suficiente para el margen de temperaturas que normalmente manejamos y para almacenar al menos tres decimales. Pero hay cientos de otras situaciones en que resultan muy �tiles. Tipo "bool" o Booleana: bool <identificador> Las variables de este tipo s�lo pueden tomar dos valores "true" o "false". Sirven para evaluar expresiones l�gicas. Este tipo de variables se puede usar para almacenar respuestas, por ejemplo: �Posees carn� de conducir?. O para almacenar informaciones que s�lo pueden tomar dos valores, por ejemplo: qu� mano usas para escribir. En estos casos debemos acu�ar una regla, en este ejemplo, podr�a ser diestro->"true", zurdo->"false". bool respuesta; bool continuar; Tipo "double" o coma flotante de doble precisi�n: [long] double <identificador> Las variables de este tipo almacenan n�meros en formato de coma flotante, mantisa y exponente, al igual que float, pero usan mayor precisi�n. Son aptos para variables de tipo real. Usaremos estas variables cuando trabajemos con n�meros grandes, pero tambi�n necesitemos gran precisi�n. Lo siento, pero no se me ocurre ahora ning�n ejemplo. Bueno, tambi�n me han preguntado por qu� no usar siempre double o long double y olvidarnos de float. La respuesta es que C siempre ha estado orientado a la econom�a de recursos, tanto en cuanto al uso de memoria como al uso de procesador. Si tu problema no requiere la precisi�n de un double o long double, �por qu� derrochar recursos?. Por ejemplo, en el compilador Dev-C++ float requiere 4 bytes, double 8 y long double 12, por lo tanto, para manejar un n�mero en formato de long double se requiere el triple de memoria y el triple o m�s tiempo de procesador que para manejar un float. Como programadores estamos en la obligaci�n de no desperdiciar nuestros recursos, y mucho m�s los recursos de nuestros clientes, para los que haremos nuestros programas. C y C++ nos dan un gran control sobre estas caracter�sticas, es nuestra responsabilidad aprender a usarlos como es debido. Tipo "void" o sin tipo: void <identificador> Es un tipo especial que indica la ausencia de tipo. Se usa en funciones que no devuelven ning�n valor, tambi�n en funciones que no requieren par�metros, aunque este uso s�lo es obligatorio en C, y opcional en C++, tambi�n se usar� en la declaraci�n de punteros gen�ricos, lo veremos m�s adelante. Las funciones que no devuelven valores parecen una contradicci�n. En lenguajes como Pascal, estas funciones se llaman procedimientos. Simplemente hacen su trabajo, y no revuelven valores. Por ejemplo, funciones como borrar la pantalla, no tienen nada que devolver, hacen su trabajo y regresan. Lo mismo se aplica a funciones sin par�metros de entrada, el mismo ejemplo de la funci�n para borrar la pantalla, no requiere ninguna entrada para poder hacer su cometido. Tipo "enum" o enumerado: enum [<identificador de tipo>] {<nombre de constante> [= <valor>], ...} [lista de variables]; Se trata de una sintaxis muy elaborada, pero no te asustes, cuando te acostumbres a ver este tipo de cosas las comprender�s mejor. Este tipo nos permite definir conjuntos de constantes, normalmente de tipo int, llamados datos de tipo enumerado. Las variables declaradas de este tipo s�lo podr�n tomar valores entre los definidos. El identificador de tipo es opcional, y nos permitir� declarar m�s variables del tipo enumerado en otras partes del programa: [enum] <identificador de tipo> <variable1> [,<variable2>[...]]; La lista de variables tambi�n es opcional. Sin embargo, al menos uno de los dos componentes opcionales debe aparecer en la definici�n del tipo enumerado. Varios identificadores pueden tomar el mismo valor, pero cada identificador s�lo puede usarse en un tipo enumerado. Por ejemplo: enum tipohoras { una=1, dos, tres, cuatro, cinco, seis, siete, ocho, nueve, diez, once, doce, trece=1, catorce, quince, dieciseis, diecisiete, dieciocho, diecinueve, veinte, ventiuna, ventidos, ventitres, venticuatro = 0}; En este caso, una y trece valen 1, dos y catorce valen 2, etc. Y veinticuatro vale 0. Como se ve en el ejemplo, una vez se asigna un valor a un elemento de la lista, los siguientes toman valores correlativos. Si no se asigna ning�n valor, el primer elemento tomar� el valor 0. Los nombres de las constantes pueden utilizarse en el programa, pero no pueden ser le�dos ni escritos. Por ejemplo, si el programa en un momento determinado nos pregunta la hora, no podremos responder doce y esperar que se almacene su valor correspondiente. Del mismo modo, si tenemos una variable enumerada con el valor doce y la mostramos por pantalla, se mostrar� 12, no doce. Deben considerarse como "etiquetas" que sustituyen a enteros, y que hacen m�s comprensibles los programas. Insisto en que internamente, para el compilador, s�lo son enteros, en el rango de valores v�lidos definidos en cada enum. |