Home
Username:
Password:
C Programming (Español) Tutorials

Elementos Básicos de un Programa del C / Tipos de Datos

Subtitles of the Movie

En este modulo veremos el concepto, un poco complicado, de los tipos de datos. ÀQue es un tipo de datos? Vamos a recordar la definicion de una variable. Una variable es una caja. Dicha caja tiene un nombre, como "x" o "Fred", indicando el contenido de la misma. Dentro de la caja incluimos un valor, como "hello" o 6. El tipo de datos determina la clase de elementos que es posible incluir en la caja, es decir, Àpodemos incluir el elemento "Fred" en la caja?, Àpodemos incluir el elemento "banana" en la caja?. o Àpodemos incluir el numero 45 en la caja? Todas las variables tienen un tipo de datos especifico para indicarÉ que la caja solo se ajustara a ciertos valores y no a otros tipos de valores. Veamos algunos ejemplos para esclarecer este aspecto. Los tipos de datos fundamentales del lenguaje de programacion C son: "int" para los numeros enteros que ya vimos. Imagine una caja con un nombre, el cual sera el nombre de la variable, y los unicos elementos que podemos incluir en ella son numeros enteros. Un entero es un numero completo que puede ser negativo, es decir, no podemos incluir en una caja de tipo "int" el numero 4.5, la palabra "Hello"É o la letra "j", pues obtendriamos un error de compilacion y el programa no funcionaria. Veamos otros tipos de datos fundamentales. El tipo "char" almacena un caracter como la letra "p", el digito 3, un espacio, un punto y coma, una barra diagonal, etc. Estos son caracteres individuales, asi que no podemos almacenar la palabra "Fred" en una variable de tipo "char". Dije que podriamos almacenar el valor 3 en una variable de tipo "char", pero me refiero al digito 3É y no al valor numerico 3. Es muy importante hacer la distincion entre los dos. El valor entero 3 puede ser utilizado en calculos, adiciones, substracciones, etc., mientras que la letra 3, el caracter 3 o el digito 3 se utiliza para desplegar la forma 3 en la pantalla. Vamos a continuar. Tambien tenemos el tipo de datos "float"É para los numeros de punto flotante, es decir, cualquier numero que contenga un numero decimal y algun valor a continuacionÉ como 7.6 o 0.0000167. Tambien existe un tipo de datos similar al "float" denominado "double" para los numeros con punto flotante de doble precision, que son los mismos pero que pueden almacenar numeros mucho mas grandes y de mayor precision. Si usted no comprende el concepto de precision, este se refiere a que podemos tener mas numeros despues de la posicion decimal. No es tan sencillo, pero ese es su significado esencial, asi que en vez de tener el numero 1.8971 podemos tener el numero 1.89712963401É y obtener asi una mayor precision. Finalmente, tenemos un tipo de datos especial llamado "void" que se refiere a una caja vacia. Veremos este tema en futuros capitulos al hablar de las funciones y los apuntadores de tipo "void"É mas adelante en este curso. Ahora veamos algunos ejemplos de variables declaradas con tipos de datos particulares. Comenzamos con el tipo "int". Escribimos "int" para indicar que almacenaremos un valor entero, como la edad de una persona. Por ejemplo, podriamos ingresar la edad de 45 anos. Para almacenar un decimal utilizamos el tipo "float", asi que escribimos "float". Alli podemos ingresarÉ algun tipo de numero decimal como el precio de un objetoÉ que podria ser 6 dolares y 99 centavos o 6.99. En cuanto al tipo "double", Àque valor podriamos almacenar? ÀPara que necesitamos un valor de gran precision? Un ejemplo podria ser la constante Pi, es decir 3.14159 o el radio de la circunferencia hasta el diametro de un circulo. Tal vez tengamos que expresarlo con varias posiciones decimales. En el tipo de datos "char" almacenamos un solo caracter. ÀQue podemos expresar con un solo caracter? Puede ser una inicial, asi que escribimos "initial". Ahora vamos a asignarles algunos valores. A la variable "pi" le asignamos el valor 3.14159, que de hecho es correctoÉ al menos con 5 posiciones decimales. Ahora debemos asignar una inicial a la variable "initial". Voy a utilizar la inicial de mi nombre, asi que escribo el signo de igualdad y la letra "M" de Mark. Pero no basta con solo ingresar aqui la letra "M", pues si lo hacemos el compilador la interpretara como una variable llamada "M". Aunque no hemos declarado una variable "M", el compilador asumiraÉ que queremos declararla, y al buscarla y no encontrarla, generara un mensaje de error indicando que no hay ninguna variable llamada "M". Podemos denotar caracteres individualesÉ al ubicarlos dentro de comillas sencillas. Estas son contrarias a las comillas doblesÉ que se utilizan para las cadenas; las comillas sencillas se utilizan para caracteres individuales con un punto y coma al final. Esta es la manera de asignar un caracter individual. Finalmente, a la variable "price" le asignamos el valor 4.57 para indicar 4 dolares y 57 centavos. Veamos otros temas mas avanzados relacionados con los tipos de datos, como por ejemplo los modificadores del tipo de datos. Veamos una explicacion. Tenemos los modificadores "short" y "long". Vayamos al codigo fuente y veamos que podemos utilizar las palabras "short" y "long", por ejemplo, para declarar un valor. Si queremos, podemos incluir un prefijo en el tipo de datos a manera de modificador, como "short" o "long" en este caso. No podemos hacerlo con todos los tipos de datosÉ sino solo con el tipo "int". Podemos tener un valor entero pequeno o grandeÉ pero no con numeros de punto flotante. No podemos tener "short double", pero en algunos compiladores podemos tener "long double". Tampoco lo aplicamos al tipo "char". Solo podemos tener "short int", "long int" y "long double". Ahora veamos sus funciones. Estos cambian la cantidad del espacio de datos disponible, para almacenar un valor en una variable, es decir, modifican el tamano de la caja. En una computadora comun de 32 bits la variable "age" de tipo "int"É puede contener valores entre el rango aproximado de 2 billones negativos hasta 2 billones positivos. Es decir, 4 bytes de informacion. Si a una variable de tipo "int" le anteponemos la palabra "short", restringimos el valor de 4 bytes de informacion a 2 bytes de informacion, y en 2 bytes podemos almacenar datos entre el rango de 32000 negativos hasta 32000 positivos, mucho menos que 2 billones, asi que estamos imponiendo una restriccion. ÀPor que querriamos hacerlo? La respuesta es: por eficiencia, pues necesitamos menos espacio si utilizamos 2 bytes en vez de 4 bytes. Si la edad de una persona nunca va a ser mayor de 150 anos, es completamente innecesario crear una caja capaz de almacenar 4 billones de diferentes posibilidades. Si en vez de "short" utilizamos la palabra "long", obtendremos un espacio adicional para un entero, pues en vez del tamano anterior, este sera incrementado en vez de ser reducido y obtendremos valores adicionales. Hablaremos al respecto mas adelante en este modulo. Otros modificadores que podemos utilizar son "unsigned" y "signed". Recuerde que un entero puede contener un valor entre 2 billones negativos hasta 2 billones positivos. Un entero de tipo "unsigned" no puede contener numeros negativos, pero puede contener 4 billones de diferentes posibilidades, asi que en vez de tener desde 2 billones negativos hasta 2 billones positivos, tenemos valores desde 0 hasta 4 billones. Si tenemos el tipo "unsigned short int", no obtendremos valores desde 32000 negativos hasta 32000 positivosÉ sino valores desde 0 hasta 64000. Tal vez se pregunte: Àpara que se utiliza el modificador "signed"? Todos los valores de tipo "int", "short", "char" y otros varios elementos tienen un signo de manera predeterminada, asi que probablemente no es necesario incluir la palabra "signed"É porque el signo ya esta alli. La palabra "signed" solo se utiliza para convertir un valor de tipo "unsigned" de regreso a un valor con signo regular. No hemos visto aun la conversion de datos, pero hablaremos al respecto en un proximo modulo. Lo mencione para aclarar este aspecto. Veamos un ejemplo de un numero de tipo "unsigned". Regresamos al codigo y escribimos "unsigned int". Podriamos escribir "unsigned short int" o "unsigned long int". y ambos funcionarian bien. No podemos tener los tipos "unsigned float" o "unsigned double", pero si el tipo "unsigned char". De hecho, podemos eliminar la palabra "int" en esta linea. Al hacerlo, se asume que la palabra "int" esta alli, asi que tenemos muchas posibilidades; podemos escribir "long" para indicar "long int", pero no podemos eliminar la palabra "int" y utilizar la palabra "long" como tipo, pues este no es un tipo de datos aunque podemos tomarlo como tal. Tambien podemos tomar "short" como un tipo de datos. Igualmente, la palabra "unsigned" indica una abreviacion para el tipo de datos "unsigned int". Lo mismo ocurre con el tipo de datos "unsigned long". La palabra "int" es completamente opcional. Veamos otros modificadores del tipo de datos. Tenemos las palabras reservadas "extern" y "static"É que veremos en el modulo dedicado al ambito de las variables al final del curso. No las veremos en este momento. Existen otros modificadores del tipo de datos que veremos brevemente, pero nos los explicare porque son un poco avanzados. Los veremos con detalle mas adelante en el curso. Tenemos los tipos combinadosÉ como "struct" y "enum", "typedef" y los arreglos de los cuales hablaremos pronto. Tambien veremos la indireccion que se aplica a los apuntadores y los constructores de tipos de datos especiales, correspondientes a las palabras "const" y "volatile", "auto" y "register". Estas palabras se utilizan para crear tipos de datos especiales que tienen comportamientos muy particulares. Ahora veamos los tamanos de los tipos de datos. Veamos el tamano exacto de la caja utilizada para almacenar una variable. Esta es la tabla que vamos a utilizar. Los tipos de datos tienen tamanos especificos. Veamos. Primero tenemos el tipo "long", el cual se almacena en 4 bytes de la memoria. Por supuesto, me refiero a un entero de tipo "long". Esto significa que si multiplicamos el numero de bytes por 8, obtenemos 8 bits en 1 byte, es decir, 32 bits. Esta es una variable o un campo de 32 bits. Veamos cuantas combinaciones de valores pueden ser almacenadas en 32 bits de informacion. Multiplicamos 2 a la potencia 32 y obtenemos casi 4 billones. El tipo "long" puede contener 4 billones de valoresÉ que pueden ser de tipo "unsigned", es decir, desde 0 hasta 4 billonesÉ o "signed" desde 2 billones negativos hasta 2 billones positivos. El tipo "short" puede contener 16 bits de informacion, es decir, 65000 combinaciones diferentes, y el tipo "char"É 1 por 8 bits de informacion, es decir, 256 combinaciones diferentesÉ desde 0 hasta 256 si son de tipo "unsigned" o desde 128 negativos hasta 127 positivos si son de tipo "signed". Aqui tenemos un aspecto muy importanteÉ y quiero que preste mucha atencion al tipo "int". El tamano de un valor entero depende del sistema operativo ejecutado en la computadora. Existen sistemas operativos de 32 bits y de 16 bits. Estos numeros se refieren al tamano de los valores enteros. Esto es mas sofisticado, pues hablamos del tamano de una direccion de memoria, pero para todos los propositos, es el mismo tamano de un entero. En una computadora de 32 bits, como en la mayoria de los sistemas operativos actuales, un entero tiene 32 bitsÉ al igual que un "long". El antiguo Windows 3.1 era un sistema operativo de 16 bits, asi que los enteros tenian 16 bits, al igual que un "short". El punto es que no tenemos ninguna garantia acerca del tamano de un entero, pues este varia de acuerdo a la computadora. Pueden ser de 2 bytes o de 4 bytes. Al escribir un codigo, es sumamente importanteÉ que al declarar una variable "int" sepamos que no hay garantia acerca del tamano de la misma. Para ser explicitos con el tamano de las variables, no debemos declararlas como "int" sino como "long", "short" o "char". Es muy importante recordarlo. Finalmente tenemos los tipos "float" y "double". El tipo "float" se almacena en 4 bytes y el tipo "double" en 8 bytes. Una parte de esa informacion almacena el exponente y otra parte almacena la precision. Me refiero a la memoria, pero el tipo "float" tiene aproximadamente 7 posiciones decimalesÉ con exponentes de hasta 10 a la potencia 38. La precision del tipo "double" va hasta 14 posiciones decimales con exponentesÉ de hasta 10 a la potencia 308, generando un numero extremadamente largo. La mayoria de personas se preocupa menos por los exponentes que por la precision. La precision de un "float" es de 7 posiciones decimales y la de un "double" es de 14. El tipo "void" no tiene ningun tamano en absoluto. Concluiremos el tema de los tamanos con algunos ejemplos de declaraciones. Ya vimos algunos, pero ahora los veremos con detalle. Estos son ejemplos de declaraciones. Tenemos "int x", donde "x" es un entero. El nombre de la variable siempre esta despues del tipo seguido por un punto y coma. Es posible declarar 2 variables en la misma linea al separarlas con comas. Aqui declaramos las variables "x" y "y" como enteros. Tambien podemos inicializar una variable al declararlaÉ y siempre es una buena idea hacerlo. Si tenemos un valor inicial para una variable, es conveniente utilizarlo en la declaracionÉ para no olvidarlo y para que alguien que lee el codigo sepa lo que queremos indicar. En esta linea, las variables "x" y "y" se declaran como enterosÉ pero a una de ellas se le asigna el valor 5. ÀA cual? Obviamente a la variable "y", pero Àque ocurre con la variable "x"? ÀEsta tambien obtiene el valor 5? Esa es la pregunta. ÀCual cree que sea la respuesta? La variable "x" no obtiene el valor 5 en esta lineaÉ y de hecho no obtiene ningun valor. Como ya vimos en secciones anteriores, una variable no inicializada como "x" contiene partes aleatorias de memoria, o en este caso, un numero aleatorio. Tambien podemos escribirlo asiÉ como una buena utilizacion del espacio en blanco. Estamos separando la segunda declaracion. Declaramos la variable "y" en la siguiente linea mediante un salto de linea y algunos espacios. Podemos hacerlo asi si queremosÉ y el compilador interpretara la segunda declaracion exactamente como en esta lista. Sin embargo, no me agrada hacerlo asiÉ porque es un poco confuso; creo que usted podria encontrar otras razonesÉ e incluso es mejor escribir "int x" e "int y" aunque sea mas largo. Podemos hacer la declaracion en la segunda linea o realizar dos declaraciones separadas, una para "x" y otra para "y". Es posible hacerlo asi si queremos. Finalmente, podemos utilizar alguno de los modificadores que vimos. Por ejemplo podemos tener "static unsigned long int". Es posible hacerlo aunque no hemos visto el significado de la palabra "static", pero ya vimos las palabras "unsigned" y "long", asi que podemos aplicarlos al tipo "int" si queremos. Los modificadores van antes del tipo, el cual va a antes del nombre de la variable. Esto es todo en cuanto a los tipos.

Tutorial Information

Course: C Programming (Español)
Author: Mark Virtue
SKU: 33759
ISBN: 1-933736-81-X
Release Date: 2007-04-16
Duration: 21.5 hrs / 139 lessons
Captions: Available on CD and Online University
Compatibility: Vista/XP/2000, OS X, Linux
QuickTime 7, Flash 8

VTC Sign up & Benefits

  • Unlimited Access
  • 98,729 Video Tutorials (23,265 free)
  • Video Available as Flash or QuickTime
  • Over 1026 Courses
  • $30 for One Month Access
  • Multi-User Discounts Available