facebook cdr twitter cdr   instagram cdr
Jueves, 05 October 2017 14:40

4. Tipos de datos

Escrito por
Valora este artículo
(0 votos)

En el lenguaje C estandarizado como C89, existían 4 tipos de datos básicos que son: los números enteros, los números reales, los caracteres, y los punteros. A partir del estándar C99 se agregan: los valores lógicos (verdadero o falso) y los números complejos.

Estos tipos de datos son parte del lenguaje, y por ello se los considera primitivos. Más adelante veremos que con el uso de estructuras y uniones es posible crear tipos compuestos de datos a partir de estos tipos primitivos.

En este capítulo veremos los enteros, los reales y los caracteres. Más adelante se verán otros tipos de datos más complejos, como son los vectores, las cadenas de caracteres, y los punteros en general.

datos

Las computadoras pueden trabajar con varios tipos de datos, los algoritmos y programas operan sobre estos. Existen dos clases de datos: datos simples y datos compuestos. Los distintos tipos de datos se representan como un conjunto o secuencia de dígitos binarios (bits).

Los lenguajes de programación de alto nivel nos permiten basarnos en abstracciones para no manejar los detalles de representación interna. Todos los números son representados en memoria mediante una cadena de bits. En el caso de los números con signo, el bit más significativo es el que se usa para representar el signo.

La representación de los números negativos se realiza mediante el complemento a dos, que es una técnica que permite operar con los números negativos de forma lógica. Sólo a modo de ejemplo, la representación en memoria de un -8 en una variable de 2 bytes, entera, con signo sería la siguiente: 1111111111111000

Y entonces, ¿como se puede calcular el máximo valor que admite un tipo de dato?

cap02

¿Qué pasa cuando nos saltamos el rango?

El overflow es lo que se produce cuando intentamos almacenar en una variable un número mayor del máximo permitido. El comportamiento es distinto para variables de números enteros y para variables de números en coma flotante.

Con números enteros

En algunos ordenadores el tamaño del tipo int es de 4 bytes (4*8=32bits). El número máximo que se puede almacenar en una variable tipo int es por tanto 2.147.483.647. Si nos pasamos de este número el que se guardará será el siguiente pero empezando desde el otro extremo, es decir, el -2.147.483.648. El compilador seguramente nos dará un aviso (warning) de que nos hemos pasado.

cap03

El resultado que obtenemos es:

El valor de num1 es: -2147483648

Con números en coma flotante

El comportamiento con números en coma flotante es distinto. Dependiendo del ordenador si nos pasamos del rango al ejecutar un programa se puede producir un error y detenerse la ejecución. Con estos números también existe otro error que es el underflow. Este error se produce cuando almacenamos un número demasiado pequeño (3,4E-38 en float).

Tipos de DatosDescripciónMemoria
int Entero 2 bytes
char Caracter 1 byte
float Flotante 4 bytes
double Flotante de doble presicion

8 bytes

4.1 Enteros

Los enteros son el tipo de dato más primitivo en C. Se usan para representar números enteros. Pero siempre se pueden encontrar otras aplicaciones para los números enteros. En general se pueden usar para representar cualquier variable discreta. Los modificadores para el tipo de datos enteros son:

 Signed (Con signo)Unsigned (Sin signo) 
Tipo de Datos Minimo - Maximo Minimo - Maximo Espacio en memoria
int -2.147.483.648 - 2.147.483.648 0 - 4.294.967.295 4 bytes
short -32.768 - 32.768 0 - 65.535 2 bytes
long -2.147.483.648 - 2.147.483.648 0 - 4.294.967.295 4 bytes
long long -9.223.372.036.854.775.808
-
 9.223.372.036.854.775.808
0 - 18.446.744.073.709.551.616 8 bytes

Los tipos de datos enteros son: int, short, long y long long, cada uno representando un número entero de un tamaño o capacidad determinado. Según el compilador y la plataforma de hardware, cada uno de estos tipos de dato puede ocupar desde 1 byte hasta 8 bytes en memoria. Además, el lenguaje C hace la distinción de si el entero es con signo (signed) o sin signo (unsigned). En caso de que no se declare si es con signo o sin signo, se toma con signo.

Algunos ejemplos de declaraciones de enteros:

int a;
unsigned int a;
signed long a;
signed long long a = 10000000;

Todos los números son representados en memoria mediante una cadena de bits. En el caso de los números con signo, el bit más significativo es el que se usa para representar el signo. La representación de los números negativos se realiza mediante el complemento a dos, que es una técnica que permite operar con los números negativos de forma lógica.

4.2 Flotantes

Se denomina flotantes a los tipos de datos que representan a los números reales, ya que utilizan un sistema de representación basado en la técnica de coma flotante, que permite operar con números reales de diversas magnitudes, mediante un número decimal llamado mantisa y un exponente que indica el orden de magnitud.

Tipo de DatoMínimoMáximoEspacio en Memoria
float 10^-37 10^37 4 bytes
double 10^-308 10^308 8 bytes

El tipo de dato flotante en lenguaje C sólo tiene dos tamaños: el float y el double, que son 4 bytes y 8 bytes respectivamente. Se los puede utilizar tanto para representar números decimales, como para representar números enteros con un orden de magnitud muy grande.

La forma de declarar una variable flotante es escribiendo en una línea uno de los tipos de datos flotantes y a continuación el nombre de la variable y tal vez algún valor que se les quiera dar.

Algunos ejemplos:

float a;
double a = 1e23;
double a = 3.1416;
float a = 4e-9;
double a = -78;

Hay que tener en cuenta que aunque los valores flotantes son más convenientes para algunas aplicaciones, hay casos en los que se prefieren los enteros. Esto se debe a que los números flotantes no necesariamente tienen soporte de hardware, en particular en las plataformas integradas. Una alternativa que se utiliza en estas situaciones es interpretar los enteros como decimales de forma que 150 se interprete como 1.5 y 2345 como 23.45.

Para el caso de los flotantes de 4 bytes, se utiliza 1 bit para el signo, 7 bits para el exponente y 24 bits para el valor del número. El procedimiento para almacenar un número en una variable flotante es el siguiente:

  1. Se convierte a binario la parte entera.
  2. Se coloca el signo en el bit más significativo de la misma manera que en los enteros (1 para el - y 0 para el +).
  3. Se mueve la coma (en la representación binaria de la parte entera) hasta que esté a la derecha del primer uno y éste se descarta (el uno más significativo). El valor del exponente será el número de posiciones que se movió la coma. El exponente usa la representación de un entero con complemento a dos.
  4. Se convierte en binario la parte decimal del número. Esto usando el peso de los bits. el bit decimal más significativo vale 1/2, el siguiente vale 1/4, el otro 1/8, el otro 1/16 y así hasta completar lo que falta para los 23 bits del valor.
  5. Se concatena todo y ese es el valor flotante representado en memoria.

4.3 Caracteres

Los caracteres se representan utilizando el tipo char, que tiene sólo 1 byte de tamaño. Este tipo se utiliza para representar los 256 caracteres de la tabla de caracteres del sistema. El tipo char es también un tipo entero, ya que puede tomar valores de 0 a 255. Por lo tanto también puede ser signed o unsigned.

El tipo de dato carácter sirve para representar datos alfanuméricos. El conjunto de elementos que puede representar está estandarizado según el código ASCII, que consiste en una combinación de 8 bits asociada a un carácter alfanumérico concreto. Las combinaciones de 8 bits dan lugar a un total de 255 valores distintos (desde 0000 0000 hasta 1111 1111), por lo que esa es la cantidad de caracteres diferentes que se pueden utilizar.

Entre los datos de tipo carácter válidos están:

  • Las letras minúsculas: 'a', 'b', 'c' ... 'z'
  • Las letras mayúsculas: 'A', 'B', 'C' ... 'Z'
  • Los dígitos: '1′, '2′, '3′ ...
  • Caracteres especiales: '$', '%', '¿', '!' ...

Nótese que no es lo mismo el valor entero 3 que el carácter '3′. Para distinguirlos, usaremos siempre comillas simples para escribir los caracteres. Los datos tipo carácter sólo pueden contener UN carácter.

 Signed (Con signo)Unsigned (Sin signo)Espacio en memoria
Tipo de dato Minimo - Maximo Minimo - Maximo &nbs;
char -128 - 127 0 - 255 1 byte

En cuanto a la forma de declarar variables de tipo char es la misma forma que con los otros tipos.

char a;
char a = 's';
unsigned char a = 48;

Como puedes ver, se le puede asignar un número a una variable char, ya que se trata de un tipo entero. En muchas situaciones se utiliza el tipo char para almacenar números pequeños, ya que ocupa en memoria sólamente un byte.

Es importante notar que con la llegada de la codificación UTF-8, los caracteres de los diversos idiomas pueden ocupar 1, 2, 3 o 4 bytes, de modo que el tipo char ya no alcanza para la representación de todos los caracteres posibles. Por ello, el estándar C99 introduce el tipo wchar que puede ocupar más de 1 byte, según sea necesario para la codificación utilizada por el sistema.

4.4 Datos sin valor (void)

Un dato sin valor es un tipo de dato que no retorna ningún valor.

4.5 Datos de tipo lógico (boolean)

El tipo dato lógico, también llamado booleano, es un dato que sólo puede tomar un valor entre dos posibles. Esos dos valores son:

  • Verdadero o en inglés true
  • Falso o en inglés false

Este tipo de datos se utiliza para representar alternativas del tipo sí/no. En algunos lenguajes, el valor de false es el 0 y el de true es el 1. Es decir, los datos lógicos contienen información binaria. Esto ya los hace bastante importantes, pero la mayor utilidad de los datos lógicos viene por otro lado: son el resultado de todas las operaciones lógicas y relacionales que se emplean continuamente en las instrucciones condicionales y en los bucles. Se representa con el número 1 y el valor

Ejemplo de declaraciones:

bool verdadero = true;

bool falso = false;

4.6 Constantes

Una constante es un dato que permanece sin cambio durante el desarrollo del algoritmo o durante la ejecución del programa. La mayoría de los lenguajes de programación nos permiten el manejo de diferentes tipos de constantes, estas pueden ser enteras, reales, caracteres y cadenas. En lenguaje C una constante se define por medio de la directiva #define (directiva del procesador). A diferencia de las variables, sólo se puede crear una cosntante por línea de código y debe asignársele un valor al momento de definirse la misma, ya que las constantes jamás cambian su valor.

Ejemplo:

Declaración de Constantes, como por ejemplo PI = 3,1416

cap04

Aquí te proponemos unos ejercicios. Puedes dejar tus resultados en los comentarios:

1. Captura tres variables y saca el promedio de las tres. Prueba el programa ya realizado con los siguientes datos:

  • a=1
  • b=2
  • c=3

Y si tu programa está bien, el resultado sería 2.

2. Hacer un programa que convierta °F a °C. °C = °F -32 * 5/9.

3. Hacer un programa que resuelva una ecuación cuadrática del tipo: ax^2 + bx + c = 0, encontrando los valores x1 y x2; donde: x = -b±√(b^2-4ac) / 2a. Prueba el programa con los siguientes datos:

  • a=1
  • b=5
  • c=2

Y si tu programa está bien, el resultado debería ser: x1 = -0.44, x2 = -4.56

 

Visto 326 veces Modificado por última vez en Martes, 05 December 2017 14:49
Alejandro Carreño

Desarrollador, Programador, Web Master y Community Manager de CDR Consultores

Deja un comentario

Asegúrese de introducir toda la información requerida, indicada por un asterisco (*). No se permite código HTML.

Tweets

https://t.co/pt0DjxdoNJ
#FraseDelDia por el Presidente y CEO de Facebook, Mark Zuckerberg. #Frase #MarkZuckerberg https://t.co/Ee26dkO24S

Productos

Servicios

servicios off
website off
desarrollo off
formacion off
negocios off

Publicaciones

« Enero 2018 »
Lun Mar Mier Jue Vie Sáb Dom
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Facebook

end-logo

 

Nestor M. Carreño T. - Todos los Derechos Reservados
Rescindir de Dios y de los valores morales, lleva no sólo al empobrecimiento espiritual, sino también al empobrecimiento material
Gracias a Usted, Muchas Gracias por Consultarnos, Dios le Bendiga!

Diseño y Desarrollo Nestor M. Carreño T. - CDR Consultores, C.A.