0% encontró este documento útil (0 votos)
81 vistas

Tip Datos ANSI C

Este documento describe los tipos de datos fundamentales en el lenguaje de programación ANSI C. Incluye caracteres (tipo char), números enteros (tipo int y long), y números reales (tipo float). Los caracteres se almacenan en un byte y representan letras y símbolos usando el código ASCII. Los enteros int usan dos bytes y pueden almacenar números entre -32768 y 32767, mientras que los long usan cuatro bytes para una gama más amplia. Los números reales float representan valores decimales usando notación científica.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
81 vistas

Tip Datos ANSI C

Este documento describe los tipos de datos fundamentales en el lenguaje de programación ANSI C. Incluye caracteres (tipo char), números enteros (tipo int y long), y números reales (tipo float). Los caracteres se almacenan en un byte y representan letras y símbolos usando el código ASCII. Los enteros int usan dos bytes y pueden almacenar números entre -32768 y 32767, mientras que los long usan cuatro bytes para una gama más amplia. Los números reales float representan valores decimales usando notación científica.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 7

Tipos de Datos en el lenguaje ANSI C

Computacin I

2. TIPOS DE DATOS FUNDAMENTALES. 2.1 VARIABLES


El C, como cualquier otro lenguaje de programacin, tiene posibilidad de trabajar con datos de distinta naturaleza: texto formado por caracteres alfanumricos, nmeros enteros, nmeros reales con parte entera y parte fraccionaria, etc. Adems, algunos de estos tipos de datos admiten distintos nmeros de cifras (rango y/o precisin), posibilidad de ser slo positivos o de ser positivos y negativos, etc. Veremos los tipos fundamentales de datos admitidos por el lenguaje C. Ms adelante se ver que hay otros tipos de datos, derivados de los fundamentales. Los tipos de datos fundamentales del C se indican en la Tabla 2.1. Tabla 2.1. Tipos de datos fundamentales (notacin completa) DATOS REALES DATOS ENTEROS float char signed short int unsigned short int double signed char signed int unsigned int long double unsigned char signed long int unsigned long int La palabra char hace referencia a que se trata de un carcter (una letra mayscula o minscula, un dgito, un carcter especial, etc.). La palabra int indica que se trata de un nmero entero, mientras que float se refiere a un nmero real (tambin llamado de punto flotante). Los nmeros enteros pueden ser positivos o negativos (signed), o bien esencialmente no negativos (unsigned); los caracteres tienen un tratamiento muy similar a los enteros. En los datos enteros, las palabras short y long hacen referencia al nmero de cifras o rango de dichos nmeros. En los datos reales las palabras double y long apuntan en esta misma direccin, aunque con un significado ligeramente diferente, como ms adelante se ver. Esta nomenclatura puede simplificarse: las palabras signed e int son las opciones por defecto para los nmeros enteros y pueden omitirse, resultando la Tabla 2.2, que indica la nomenclatura ms habitual para los tipos fundamentales del C. Tabla 2.2. Tipos de datos fundamentales (notacin abreviada). DATOS REALES DATOS ENTEROS float char short unsigned short double signed char int unsigned long double unsigned char long unsigned long Recurdese que en C es necesario declarar todas las variables que se vayan a utilizar al inicio de cada funcin (variables locales o automticas) o al inicio del programa (variables globales). Una variable no declarada produce un mensaje de error en la compilacin. Cuando una variable es declarada se le reserva memoria de acuerdo con el tipo incluido en la declaracin. Es posible inicializar (dar un valor inicial) las variables en el momento de la declaracin; ya se ver que en ciertas ocasiones el compilador da un valor inicial por defecto, mientras que en otros casos no se realiza esta inicializacin y la memoria asociada con la variable correspondiente contiene basura informtica (combinaciones sin sentido de unos y ceros, resultado de operaciones anteriores con esa zona de la memoria, para otros fines).

2.2 Caracteres (tipo char)


Las variables carcter char contienen un nico carcter y se almacenan en un byte de memoria (8 bits). En un bit se pueden almacenar dos valores (0 y 1); con dos bits se pueden almacenar 22= 4 valores (00, 01, 10, 11 en binario; 0, 1, 2, 3 en decimal). Con 8 bits se podrn almacenar 28= 256 valores diferentes (normalmente entre 0 y 255; con ciertos compiladores entre -128 y 127). La declaracin de variables tipo carcter puede tener la forma: char nombre; char nombre1, nombre2, nombre3;

Tipos de Datos en el lenguaje ANSI C

Computacin I Se puede declarar ms de una variable de un tipo determinado en una sola sentencia. Se puede tambin inicializar la variable en la declaracin. Por ejemplo, para definir la variable carcter letra y asignarle el valor a, se puede escribir: char letra = a; A partir de ese momento queda definida la variable letra con el valor correspondiente a la letra a. Recurdese que el valor a utilizado para inicializar la variable letra es una constante carcter. En realidad, letra se guarda en un solo byte como un nmero entero, el correspondiente a la letra a en el cdigo ASCII, que se muestra en la Tabla 2.3 para los caracteres estndar (existe un cdigo ASCII extendido que utiliza los 256 valores y que contiene caracteres especiales y caracteres especficos de los alfabetos de diversos pases, como por ejemplo las vocales acentuadas y la letra para el castellano).

0 1 2 3 4 5 6 7 8 9 10 11 12

0 Null Nl Dc4 Rs ( 2 < F P Z D N X

1 soh vt nak us ) 3 = G Q [ e o y

2 stx np syn sp * 4 > H R \ f p z

Tabla 2.3. Cdigo ASCII estndar. 3 4 5 6 Etx eot enq ack Cr so si dle Etb can em sub # $ + , . 5 6 7 8 @ A B I J K L S T U V ] ^ _ ` G h i j Q r s t { | } ~

7 bel dc1 esc % / 9 C M W a k u del

8 bs dc2 fs & 0 : D N X b l v

9 ht dc3 gs 1 ; E O Y c m w

La Tabla 2.3 se utiliza de la siguiente forma. La primera cifra (las dos primeras cifras, en el caso de los nmeros mayores o iguales que 100) del nmero ASCII correspondiente a un carcter determinado figura en la primera columna de la Tabla, y la ltima cifra en la primera fila de la Tabla. Sabiendo la fila y la columna en la que est un determinado carcter puede componerse el nmero correspondiente. Por ejemplo, la letra A est en la fila 6 y la columna 5, su nmero ASCII es por tanto 65. El carcter % est en la fila 3 y la columna 7, por lo que su representacin ASCII ser el 37. Obsrvese que el cdigo ASCII asocia nmeros consecutivos con las letras maysculas y minsculas ordenadas alfabticamente. Esto simplifica notablemente ciertas operaciones de ordenacin alfabtica de nombres. En la Tabla 2.3 aparecen muchos caracteres no imprimibles (todos aquellos que se expresan con 2 3 letras). Por ejemplo, el ht es el tabulador horizontal, el nl es el carcter nueva lnea, etc. Volviendo al ejemplo de la variable letra, su contenido puede ser variado cuando se desee por medio de una sentencia que le asigne otro valor, por ejemplo: letra = z; Tambin puede utilizarse una variable char para dar valor a otra variable de tipo char: caracter = letra; // Ahora caracter es igual a z Como una variable tipo char es un nmero entero pequeo (entre 0 y 255), se puede utilizar el contenido de una variable char de la misma forma que se utiliza un entero, por lo que estn permitidas operaciones como: letra = letra + 1; letra_minuscula = letra_mayuscula + (a - A);

Tipos de Datos en el lenguaje ANSI C

Computacin I En el primer ejemplo, si el contenido de letra era una a, al incrementarse en una unidad pasa a contener una b. El segundo ejemplo es interesante: puesto que la diferencia numrica entre las letras minsculas y maysculas es siempre la misma (segn el cdigo ASCII), la segunda sentencia pasa una letra mayscula a la correspondiente letra minscula sumndole dicha diferencia numrica. Recurdese para concluir que las variables tipo char son y se almacenan como nmeros enteros pequeos. Ya se ver ms adelante que se pueden escribir como caracteres o como nmeros segn que formato de conversin se utilice en la llamada a la funcin de escritura.

2.3 Nmeros enteros (tipo int)


De ordinario una variable tipo int se almacena en 2 bytes (16 bits), aunque algunos compiladores utilizan 4 bytes (32 bits). El ANSI C no tiene esto completamente normalizado y existen diferencias entre unos compiladores y otros. El compilador de GNU y los compiladores de Microsoft para PCs utilizan 2 bytes. Con 16 bits se pueden almacenar 216= 65536 nmeros enteros diferentes: de 0 al 65535 para variables sin signo, y de -32768 al 32767 para variables con signo (que pueden ser positivas y negativas), que es la opcin por defecto. Este es el rango de las variables tipo int. Una variable entera int se declara, o se declara y se inicializa en la forma: unsigned int numero; int nota = 10; En este caso la variable numero podr estar entre 0 y 65535, mientras que nota deber estar comprendida entre -32768 al 32767. Cuando a una variable int se le asigna en tiempo de ejecucin un valor que queda fuera del rango permitido (situacin de overflow o valor excesivo), se produce un error en el resultado de consecuencias tanto ms imprevisibles cuanto que de ordinario el programa no avisa al usuario de dicha circunstancia. Cuando el ahorro de memoria es muy importante puede asegurarse que la computadora utiliza 2 bytes para cada entero declarndolo en una de las formas siguientes: short numero; short int numero; Como se ha dicho antes, ANSI C no obliga a que una variable int ocupe 2 bytes, pero declarndola como short o short int s que necesitar slo 2 bytes (al menos en las PCs).

2.4 Nmeros enteros (tipo long)


Existe la posibilidad de utilizar enteros con un rango mayor si se especifica como tipo long en su declaracin: long int numero_grande; o, ya que la palabra clave int puede omitirse en este caso, long numero_grande; El rango de un entero long puede variar segn la computadora o el compilador que se utilice, pero de ordinario se utilizan 4 bytes (32 bits) para almacenarlos, por lo que se pueden representar 232= 4.294.967.296 nmeros enteros diferentes. Si se utilizan nmeros con signo, podrn representarse nmeros entre -2.147.483.648 y 2.147.483.647. Tambin se pueden declarar enteros long que sean siempre positivos con la palabra unsigned:

Tipos de Datos en el lenguaje ANSI C

Computacin I unsigned long numero_positivo_muy_grande; En algunas computadoras una variable int ocupa 2 bytes (coincidiendo con short) y en otros 4 bytes (coincidiendo con long). Lo que garantiza el ANSI C es que el rango de int no es nunca menor que el de short ni mayor que el de long.

2.5 Nmeros reales (tipo float)


En muchas aplicaciones hacen falta variables reales, capaces de representar magnitudes que contengan una parte entera y una parte fraccionaria o decimal. Estas variables se llaman tambin de punto flotante. De ordinario, en base 10 y con notacin cientfica, estas variables se representan por medio de la mantisa, que es un nmero mayor o igual que 0.1 y menor que 1.0, y un exponente que representa la potencia de 10 por la que hay que multiplicar la mantisa para obtener el nmero considerado. Por ejemplo, pi se representa como 0.3141592654X101. Tanto la mantisa como el exponente pueden ser positivos y negativos. Las computadoras trabajan en base 2. Por eso un nmero de tipo float se almacena en 4 bytes (32 bits), utilizando 24 bits para la mantisa (1 para el signo y 23 para el valor) y 8 bits para el exponente (1 para el signo y 7 para el valor). Es interesante ver qu clase de nmeros de punto flotante pueden representarse de esta forma. En este caso hay que distinguir el rango de la precisin. La precisin hace referencia al nmero de cifras con las que se representa la mantisa: con 23 bits el nmero ms grande que se puede representar es,223 = 8.388.608 lo cual quiere decir que se pueden representar todos los nmeros decimales de 6 cifras y la mayor parte (aunque no todos) de los de 7 cifras (por ejemplo, el nmero 9.213.456 no se puede representar con 23 bits). Por eso se dice que las variables tipo float tienen entre 6 y 7 cifras decimales equivalentes de precisin. Respecto al exponente de dos por el que hay que multiplicar la mantisa en base 2, con 7 bits el nmero ms grande que se puede representar es 127. El rango vendr definido por la potencia, 2127 = 1.7014x1038 lo cual indica el nmero ms grande representable de esta forma. El nmero ms pequeo en valor absoluto ser del orden de 2-128 = 2.9385x1039 Las variables tipo float se declaran de la forma: float numero_real; Las variables tipo float pueden ser inicializadas en el momento de la declaracin, de forma anloga a las variables tipo int.

2. 6 Nmeros reales (tipo double)


Las variables tipo float tienen un rango y (sobre todo) una precisin muy limitada, insuficiente para la mayor parte de los clculos tcnicos y cientficos. Este problema se soluciona con el tipo double, que utiliza 8 bytes (64 bits) para almacenar una variable. Se utilizan 53 bits para la mantisa (1 para el signo y 52 para el valor) y 11 para el exponente (1 para el signo y 10 para el valor). La precisin es en este caso, 252 = 4.503.599.627.370.496 lo cual representa entre 15 y 16 cifras decimales equivalentes. Con respecto al rango, con un exponente de 10 bits el nmero ms grande que se puede representar ser del orden de 2 elevado a 2 elevado a 10 (que es 1024): 21024 = 1.7977x10308

Tipos de Datos en el lenguaje ANSI C

Computacin I Las variables tipo double se declaran de forma anloga a las anteriores: double real_grande; Por ltimo, existe la posibilidad de declarar una variable como long double, aunque el ANSI C no garantiza un rango y una precisin mayores que las de double. Eso depende del compilador y del tipo de computadora. Estas variables se declaran en la forma: long double real_pero_que_muy_grande; cuyo rango y precisin no est normalizado. Los compiladores de GNU y los de Microsoft para PCs utilizan 10 bytes (64 bits para la mantisa y 16 para el exponente).

2. 7 Duracin y visibilidad de las variables: Modos de almacenamiento.


El tipo de una variable se refiere a la naturaleza de la informacin que contiene (ya se han visto los tipos char, int, long, float, double, etc.). El modo de almacenamiento (storage class) es otra caracterstica de las variables de C que determina cundo se crea una variable, cundo deja de existir y desde dnde se puede acceder a ella, es decir, desde dnde es visible. En C existen 4 modos de almacenamiento fundamentales: auto, extern, static y register. 1. auto (automtico). Es la opcin por defecto para las variables que se declaran dentro de un bloque {...}, incluido el bloque que contiene el cdigo de las funciones. En C la declaracin debe estar siempre al comienzo del bloque. En C++ la declaracin puede estar en cualquier lugar y hay autores que aconsejan ponerla justo antes del primer uso de la variable. No es necesario poner la palabra auto. Cada variable auto es creada al comenzar a ejecutarse el bloque y deja de existir cuando el bloque se termina de ejecutar. Cada vez que se ejecuta el bloque, las variables auto se crean y se destruyen de nuevo. Las variables auto son variables locales, es decir, slo son visibles en el bloque en el que estn definidas y en otros bloques anidados en l, aunque pueden ser ocultadas por una nueva declaracin de una nueva variable con el mismo nombre en un bloque anidado. No son inicializadas por defecto, y (antes de que el programa les asigne un valor) pueden contener basura informtica . A continuacin se muestra un ejemplo de uso de variables de modo auto. { int i=1, j=2; // se declaran e inicializan i y j ... { float a=7., j=3.; // se declara una nueva variable j ... j=j+a; // aqui j es float ... // la variable int j es invisible ... // la variable i=1 es visible } ... // fuera del bloque, a ya no existe ... // la variable j=2 existe y es entera } 2. extern. Son variables globales, que se definen fuera de cualquier bloque o funcin, por ejemplo antes de definir la funcin main(). Estas variables existen durante toda la ejecucin del programa. Las variables extern son visibles por todas las funciones que estn entre la definicin y el fin del archivo. Para verlas desde otras funciones definidas anteriormente o desde otros archivos, deben ser declaradas en ellos como variables extern. Por defecto, son inicializadas a cero.

Se llama bloque anidado a un bloque contenido dentro de otro bloque

Tipos de Datos en el lenguaje ANSI C

Computacin I Una variable extern es definida o creada (una variable se crea en el momento en el que se le reserva memoria y se le asigna un valor) una sola vez, pero puede ser declarada (es decir, reconocida para poder ser utilizada) varias veces, con objeto de hacerla accesible desde diversas funciones o ficheros. Tambin estas variables pueden ocultarse mediante la declaracin de otra variable con el mismo nombre en el interior de un bloque. La variables extern permiten transmitir valores entre distintas funciones, pero sta es una prctica considerada como peligrosa. A continuacin se presenta un ejemplo de uso de variables extern. float i=15.3, j, k; // se declaran antes de main() int main() { int i=3; // i=1 se hace invisible int func1(int, int); ... // j, k son visibles ... // i es entera no real return 0; } int func1(int m) { int k=3; // k=0 (float) se hace invisible ... // i=1 (entera) es invisible ... // i=15.3 (real) es visible } 3. static. Cuando ciertas variables son declaradas como static dentro de un bloque, estas variables conservan su valor entre distintas ejecuciones de ese bloque. Dicho de otra forma, las variables static se declaran dentro de un bloque como las auto, pero permanecen en memoria durante toda la ejecucin del programa como las extern. Cuando se llama varias veces sucesivas a una funcin (o se ejecuta varias veces un bloque) que tiene declaradas variables static, los valores de dichas variables se conservan entre dichas llamadas. La inicializacin slo se realiza la primera vez. Por defecto, son inicializadas a cero. Las variables definidas como static extern son visibles slo para las funciones y bloques comprendidos desde su definicin hasta el fin del archivo. No son visibles desde otras funciones ni aunque se declaren como extern. sta es una forma de restringir la visibilidad de las variables. Por defecto, y por lo que respecta a su visibilidad, las funciones tienen modo extern. Una funcin puede tambin ser definida como static, y entonces slo es visible para las funciones que estn definidas despus de dicha funcin y en el mismo fichero. Con estos modos se puede controlar la visibilidad de una funcin, es decir, desde qu otras funciones puede ser llamada. 4. register. Este modo es una recomendacin para el compilador, con objeto de que (si es posible) ciertas variables sean almacenadas en los registros de la CPU y los clculos con ellas sean ms rpidos. No existen los modos auto y register para las funciones.

2.8 Conversiones de tipo implcitas y explcitas(casting)


Ms adelante se comentarn las conversiones implcitas de tipo que tienen lugar cuando en una expresin se mezclan variables de distintos tipos. Por ejemplo, para poder sumar dos variables hace falta que ambas sean del mismo tipo. Si una es int y otra float, la primera se convierte a float (es decir, la variable del tipo de menor rango se convierte al tipo de mayor rango), antes de realizar la operacin. A esta conversin

Tipos de Datos en el lenguaje ANSI C

Computacin I automtica e implcita de tipo (el programador no necesita intervenir, aunque s conocer sus reglas), se le denomina promocin, pues la variable de menor rango es promocionada al rango de la otra. As pues, cuando dos tipos diferentes de constantes y/o variables aparecen en una misma expresin relacionadas por un operador, el compilador convierte los dos operandos al mismo tipo de acuerdo con los rangos, que de mayor a menor se ordenan del siguiente modo:
long double > double > float > unsigned long > long > unsigned int > int > char

Otra clase de conversin implcita tiene lugar cuando el resultado de una expresin es asignado a una variable, pues dicho resultado se convierte al tipo de la variable (en este caso, sta puede ser de menor rango que la expresin, por lo que esta conversin puede perder informacin y ser peligrosa). Por ejemplo, si i y j son variables enteras y x es double, x = i*j j + 1; En C existe tambin la posibilidad de realizar conversiones explcitas de tipo (llamadas casting, en la literatura inglesa). El casting es pues una conversin de tipo, forzada por el programador. Para ello basta preceder la constante, variable o expresin que se desea convertir por el tipo al que se desea convertir, encerrado entre parntesis. En el siguiente ejemplo, k = (int) 1.7 + (int) masa; la variable masa es convertida a tipo int, y la constante 1.7 (que es de tipo double) tambin. El casting se aplica con frecuencia a los valores de retorno de las funciones.

También podría gustarte