22 de Octubre de 2014
Dic
13

Teoría C: Tipos y Constantes

Categorías: 

Tipos y Constantes

En una maquina digital, toda la información se codifica mediante unos y ceros, independientemente de cómo se nos muestre a nosotros (imágenes, letras, números en decimal, etc.). Por ello, si nosotros no sabemos con qué estamos trabajando, esos 1’s y 0’s podrían significar cualquier cosa. Ello implica que deberemos tratarlos de una manera u otra según lo que sean.

A partir de aquí, nace la necesidad de que el programador, cuando necesita reservar un trozo de memoria para almacenar algo, necesite especificar qué tipo de “algo” es, para que el programa más adelante, sepa cómo interpretar esos 1’s y 0’s. Por ejemplo, si yo guardo el numero 2, eso se almacenaría en binario con un 10, pero si ahora leo eso como una imagen en blanco y negro, tal vez sería un pixel con la tonalidad correspondiente al valor 2. Así nacen los tipos de variables.

Una variable no es más que un objeto, que representa un trozo de memoria (RAM) donde podemos almacenar algo. Al poner delante (en nuestro caso, en C) el tipo, le estamos diciendo al compilador (emacs, dev-c++, etc.) qué tipo de datos se van a guardar en esa zona de la memoria, y así el compilador evitará que intentemos usarlos de otra forma (por ejemplo, intentar sumar un dato Booleano (verdadero o falso) con un integer (numero de tipo entero)).

Además, los tipos traen consigo otras cosas, como el tamaño que ocupan en memoria y la forma en que se almacenan los datos. Por ejemplo, un short tiene un tamaño de dos octetos (16 bits), y permite por tanto almacenar datos en el rango 0-65535. Algunos de los tipos más importantes son: Numéricos: short, int, double, float, long; Alfanuméricos: char, char nombre[], Boleanos: _Bool. Donde “char nombre[]” es un vector de caracteres, lo que se denomina cadena de texto (string). Pero lo de los vectores ya se verá en el tema de tablas. Por último, cabe destacar el identificador unsigned, que es aplicable a cualquiera de los tipos numéricos y que elimina el signo en dicha variable (no permite por tanto representar números negativos).

Cuando nosotros estamos programando, tenemos la necesidad de asignar valores a las variables que utilizamos, y no meter todo nosotros mismos por teclado. Para ello se usan las constantes, que pueden ser enteras, en coma flotante, de carácter y de cadena de caracteres. Empecemos:

Constantes Enteras: Se pueden escribir en tres de las bases que hemos trabajado anteriormente, en base 8, base 10 y base 16.

                Base 8: Se escriben empezando con un 0. Por ejemplo: 011 sería equivalente a 9.

                Base 10: Se escriben empezando por cualquier numero distinto de 0. Ejemplo: 152.

                Base 16: Se escriben empezando por 0x ó 0X. Por ejemplo: 0x1a, 0X55, 0x11…

Estas constantes tienen por defecto tipo int (son constantes enteras), pero podemos modificarlas por si queremos asignarle dicho valor a otro tipo de variables. (No importan las mayúsculas o minúsculas). Si añadimos una “u” al final de la constante, la convertiremos en unsigned; si añadimos una “l” la transformaremos en long; con “ll” la transformaremos en long long, y además podemos combinarlas, por ejemplo 0xaa1LLU sería unsigned long long int.

Constantes en Coma Flotante: Se diferencian de las enteras en que tienen o bien decimales, o bien exponentes (o ambos). Están limitadas a exponentes enteros (positivos y negativos). Para indicar alguno de estos requisitos, basta con poner un “.” En el caso de los decimales, y una “e” seguida del exponente en el caso de las exponenciales. Por ejemplo: 10., que sería equivalente a 10.0; 2e2, que sería equivalente a 4; 2.3e5, que sería equivalente a… miradlo en la calculadora. Estas constantes son por defecto del tipo Double, pero pueden ser modificadas dentro del rango de tipos decimales. Por ejemplo, podemos ponerle una “f” que los convierta en float o una “l” que los convierte en long double.

Constantes de Carácter: Son las más simples, dado que estamos representando un único carácter. Para expresarlos, únicamente hay que colocarlos entre comillas simples, por ejemplo: ‘c’, ‘1’, ‘t’, ‘ ‘, ‘º’, etc. Sin embargo, hay algunos caracteres especiales que no pueden ser representados con un único carácter, así que hay que usar la barra ‘\’ delante para poder expresarlos. (Recomendado mirar el libro de apuntes, pagina 4-6). Además, podemos identificar estas constantes con los códigos respectivos en hexadecimal y octal (equivalentes a sus valores decimales en la tabla ASCII), pero ello implica tener que saber su código decimal para transformarlos (o binario, que es peor). Su representación sería ‘\numero’ en octal, y ‘\xnumero’ en hexadecimal. Por ejemplo: ‘\000’ sería el cero en octal, ‘\x0’ sería el cero en hexadecimal, etc.

Cadenas de Caracteres: Son parecidas a las constantes de carácter, pero nunca son de uno solo de ellos. Se expresan colocándose entre comillas dobles (al contrario que las de un único carácter, que van entre simples). Se ha de tener cuidado, pues una cadena encerrada por comillas dobles, incorpora automáticamente al final el carácter ‘\0’, que le indica al compilador el fin de la cadena, y que está ahí aunque nosotros no lo vemos. Por ejemplo: “Hola a todos” (equivalente a: ‘H’, ‘o’, ‘l’, ‘a’, ‘ ‘, ‘a’, ‘ ‘, ‘t’, ‘o’, ‘d’, ‘o’, ‘s’, ‘\0’).

Bueno, y eso ha sido todo por hoy.

Un saludo, Btc

 

5
Valoración media: 5 (1 voto)

2 Comentarios:

La definicion de tipo de

La definicion de tipo de variable no es demasiado correcta, hablando con propiedad seria mas correcto definirlo como el domino abstracto de valores y un conjunto de operaciones definidas sobre ese dominio. Un ejemplo fácil: los booleanos

Dominio:{verdadero,falso} Operaciones: AND,OR,NOT,XOR.... 

 

Además no diferencias entre los valores de tipo entero y los valores de tipo real llamandolos simplemente valores numéricos. Para un procesador no es lo mismo usar la ALU que la FPU. Y con lo de los caracteres la primera lección que te enseñan en la carrera (estudio 2º en Grado de Ingenieria informatica en Murcia) es que nunca se debe presuponer la codificacion de éstos, así que no puedes poner algo en Hexadecimal diciendo que es un carácter en codigo ASCII porque es posible que otro ordenador no lo codifique correctamente

Ante todo, gracias por

Ante todo, gracias por comentar Glanzmann, ya que no hay muchos comentarios normalmente, y menos de este tipo (constructivos).

  Hombre, técnicamente, lo que tu dices es más correcto, eso sin duda. Sin embargo, a mi no me interesa dar una definición ténica aquí de nada, primero porque ni yo mismo la se en algunos casos, y porque el verdadero objetivo es que el novato "de a pie" que quiere aprender, seguramente necesitaría muchas mas explicaciones y aclaraciones para entender una explicación de ese tipo (además, siempre se puede recurrir a la wikipedia o a alguna fuente especializada).

 Respecto a lo de la separación, es cierto que no he diferenciado entre enteros y reales, porque aunque a nivel interno no sea lo mismo, a mi eso a nivel de programación de alto nivel no me afecta (si quieres hablar de programación para procesadores, entonces si, y ya entramos en el tema de la codificación de cada tipo de dato a nivel máquina).

 Por último, es cierto que no se puede presuponer el valor de la constante de caracter al cambiar de computadora, pero aunque eso sea un inconveniente y pueda traer problemas, uno debe aceptar que la posibilidad de representarlos mediante un código numérico existe de todas formas.

Un saludo, Btc Wink