You are on page 1of 9

LENGUAJE DE PROGRAMACION C

Tipos de datos definidos por el usuario


1.1 Agregacin de datos Struct
Se trata de la forma ms verstil de trabajar con fichas de informacin.
Struct [Nombre_de_la_estructura]
{
tipo1 campo1;
tipo2 campo2;
.
.
tipoN campoN;
} [variable];

La palabra clave struct define una estructura. Por tratarse de un tipo de datos
puede utilizarse directamente para definir una variable. Lo que se encuentra dentro de
las llaves es una definicin tpica de variables con su tipo y su identificador.
Ejemplos.
struct punto
{
float x;
float y;
int

color;

} punto_de_fuga;

Aqu estamos definiendo una variable llamada punto_de_fuga cuyo tipo es una
estructura de datos formada por tres campos y a la que hemos llamado punto.

1.2 Uniones de datos Unin


UNION. En si la unin de datos como su nombre lo dice, une o enlaza dos registros
de variables para que puedan ser utilizados de una sola forma, pero en distintos mtodos
y obtener una salida de dos en una.
Hay que resaltar que una de las declaraciones de la unin puede ser de tipo void, lo
que indica que en ese caso no hay datos asociados, o sea, no se transmitira nada al
enviar esa unin (slo el valor del discriminante). El nico otro lugar donde puede
aparecer un void en XDR es en la definicin del argumento o del valor devuelto por una
funcin. Este tipo XDR se proyecta en C como un tipo struct que contiene un tipo unin
de C:
Struct tipo_union {
int discriminante;
Union {
declaracin 1;
declaracin 2;
..
declaracin N;
} tipo_union_u;
};

Para aclarar el uso del tipo unin de XDR, se presenta, a continuacin, un ejemplo.
Supngase que se quiere definir un servicio RPC denominado read, que devuelve un
valor Booleano que indica si la operacin se realiz con xito. En caso afirmativo, la
funcin devuelve los datos ledos. El tipo XDR que define el valor devuelto por esa
funcin de servicio podra ser el siguiente:
Union read_res switch (bool exito) {
case FALSE: void;
case TRUE: opaque datos<>;
};

Ntese que, suponiendo que tenemos una variable de ese tipo llamada resultado,
para acceder a los datos habra que especificar lo siguiente:
resultado.read_res_u.datos

1.3 Registros variantes


Los registros variantes son una especie de sentencia case dentro de un registro y
son muy tiles cuando tenemos ciertos atributos que sabemos de antemano que slo
usaremos en ciertas situaciones.
Por tanto, los registros variantes son muy eficientes y seguros, porque slo permiten
al programador realizar operaciones que tengan algn significado dentro del contexto
dado y que sean permisibles dentro del registro.
Principales caractersticas
Mezcla de Uniones, Productos y Enumerado
Permiten expresar distintas formas para valores de un mismo tipo.
Cada forma puede tener un numero distinto de componentes

Ejemplo: Tipo para representar cuatro clases de figuras


type Radio = Float
type Lado = Float
type Base = Float
type Altura = Float
data Figura = Circulo Radio
Cuadrado Lado
Rectngulo Base Altura
Punto
deriving Show
un Circulo : : Figura
un Circulo = Circulo 25
un Rectngulo : : Figura
un Rectngulo = Rectngulo 10 15
lista Figuras : : [Figura]
lista Figuras = [Circulo 15; Cuadrado 3; Rectngulo 5 6]
rea : : Figura ! Float
rea (circulo r) = pi * r ^ 2
rea (Cuadrado l) = l ^ 2
area (Rectangulo b h) = b * h
rea Punto = 0

1.4 Tipos de datos enumerados


Una enumeracin o tipo enumerado es un tipo especial de estructura en la que los
literales de los valores que pueden tomar sus objetos se indican explcitamente al
definirla. Por ejemplo, una enumeracin de nombre Tamao cuyos objetos pudiesen
tomar los valores literales Pequeo, Mediano o Grande se definira as:
enum Tamao
{
Pequeo,
Mediano,
Grande
}

Tipos enumerados. Un tipo enumerado o enumeracin est construido por una serie
de constantes simblicas enteras. Los tipos enumerados se tratan de modo ligeramente
diferente en C++. El nombre de la etiqueta enum se considera como un nombre de tipo
igual que las etiquetas de struct y unin. Por tanto se puede declarar una variable de
enumeracin, estructura o unin sin utilizar las palabras enum, strcut o union.
Elementos Bsicos.
Ya sabemos que en los algoritmos aparecen objetos que tienen tres caractersticas:
Nombre.
Tipo.
Valor:
Variables.
Constantes.

Tipo:

Define el conjunto de valores que puede tomar un determinado

Objeto:

Determina las operaciones que se pueden aplicar a un objeto.


Define el espacio que ser necesario reservar en memoria para albergar a un
objeto.
Define la interpretacin del valor almacenado en memoria.

Cardinalidad:

Es el nmero de valores que tiene un tipo de datos. La simbolizaremos con #.

Operadores bsicos:

Aspecto prctico: manipulacin de objetos.


Para ello:
A cada tipo de datos se le asocia un conjunto de operadores bsicos. Cuntos?,
cules? Como criterio general: se le asocian aquellos que posibiliten al
programador construir cualquier operacin adicional, en funcin de los bsicos,
de una forma eficiente.
Un mismo smbolo (por ejemplo +) puede utilizarse como operador para
distintos tipos de datos. Esto se denomina sobrecarga.

Tipos de datos simples


Compatibilidad de tipo:

Los operadores tienen que aplicarse a objetos de tipos de datos compatibles


(iguales o no).
La informacin del tipo de dato ayuda a los compiladores a detectar operaciones
inapropiadas con tipos de datos no compatibles.
Hay lenguajes de programacin ms estrictos que otros en cuanto al chequeo de
tipos.
En nuestro pseudolenguaje seremos lo ms flexible posible, pero tendiendo a
aplicar operadores a tipos de datos iguales, con el fin de
evitar posibles errores de diseo.

Declaracin de constantes y variables en nuestro pseudo lenguaje:


Constantes
nombre = valor
Variables
nombre : Tipo
Clasificacin de tipos de datos simples:

Tipos simples:

Predefinidos (N, Z, R, C, B)
Definidos por el programador (enumerado y subrango)

Tipos estructurados.

Arrays
Cadenas de Caracteres
Registros

Tipos de datos predefinidos:


Generalmente, y dependiendo del lenguaje de programacin, existen unos tipos de
datos que pueden utilizarse sin necesidad de definirlos. Bsicamente son:
1. Formados por elementos indivisibles.
2. Formados por elementos ordenados, esto es, le son aplicables los operadores
relacionales (=, >, <, , , ).
Los tipos de datos son:
B Booleano
C Carcter
N Natural
Z Entero
R Real
Conversin de tipos
Para convertir un valor de un tipo origen a otro tipo destino, se utilizar el nombre
del tipo destino como funcin conversora. Esto slo es aplicable a los tipos de datos
simples.
Tipo entero

Sea N el nmero de bits usados para almacenar un valor entero.


Valores: nmeros enteros comprendidos en el rango
Operadores aritmticos asociados: +,-,*,DIV,MOD.
Representacin: secuencia de dgitos (con posible signo - delante).

Tipo real

Valores: nmeros reales.


Operadores aritmticos asociados: +,-,*,/.
Representacin: secuencia de dgitos con el obligado punto decimal y con un
posible factor de escala, aunque en nuestro

1.5 Manejo de Bits

Operadores para manejo de bits


Existen seis operadores para manejo de bits:
1)

& AND de bits

2)

| OR inclusivo de bits

3)

^ OR exclusivo de bits

4)

<< corrimiento a la izquierda

5)

>> corrimiento a la derecha

6)

~ complemento a uno (unario)

AND (&)
La funcin AND activa los bits resultantes cuando los bits de los dos operandos
son 1, de otra forma el resultado es =. Entonces si se coloca en lnea los dos operandos y
se realiza la funcin AND, se puede ver que los dos bits de mayor peso (los bits
situados mas a la izquierda de cada numero) son 1, as los bits resultantes de cada uno
es 1. Los dos bits de menor peso se evalan a 0 porque al menos uno de los dos
operandos es 0:
1101
& 1100
1100

OR
La operacin OR inclusiva (|) significa que si uno de los dos operandos es 1 el
resultado es 1.
000
011
111

El OR exclusivo significa que si los dos operandos son diferentes el resultado es 1,


de otra forma es resultado es 0
011
101
110

Corrimiento de bits

Tanto el operador de corrimiento a la izquierda () como el operador de corrimiento


a la derecha (), solo desplazan los bits del operando de la izquierda el numero de
posiciones indicadas por el operador de la derecha. Los desplazamientos ocurren en la
direccin indicada por el propio operador. Por ejemplo
13 >> 1

Desplaza los bits del entero 13 una posicin a la derecha as:


13 = 1101
1101 >> 1 = 0110
0110 = 6

Complemento a uno
El operador unario ~ da el complemento a uno de un entero; esto es, convierte
cada bit 1 en un bit 0 y viceversa. Por ejemplo:
Operador Resultado
10
01

1.6 Campos de Bits


Los campos de bits, o simplemente campos, son grupos de un nmero determinado
de bits, que pueden o no tener un identificador asociado. Representan un artificio que
permite utilizar miembros de tamao arbitrario en estructuras, uniones y clases;
independiente de la posibilidad que proporcionan los tipos bsicos (carcter, char,
enteros ,int. booleanos bool enumeraciones enum cuyo tamao est predeterminado por
el lenguaje. Por ejemplo, en ocasiones es necesario almacenar semforos (flags) con
determinados estados del programa, para los que en realidad solo hace falta un bit, pero
incluso una variable bool ocupa un octeto. Los campos de bits permiten utilizar cada bit
de un octeto independientemente, aumentando as su capacidad de representacin

1.7 Operaciones con Bits


La lgica booleana es importante en el diseo de circuitos y tiene un paralelo en la
lgica de programacin. Las instrucciones para lgica booleana son AND, OR, XOR,
TEST y NOT, que pueden usarse para poner bits en 0 o en 1 y para manejar datos
ASCII con propsitos aritmticos. El formato general para las operaciones booleanas es:
[etiqueta :] | operacin | {registro/memoria}, {registro/memoria/inmediato}|

El primer operando se refiere a un byte o palabra en un registro o memoria y es el


nico valor que es cambiado. El segundo operando hace referencia a un registro o a un
valor inmediato. La operacin compara los bits de los dos operandos referenciados y de
acuerdo con esto establece las banderas CF, OF, PF, SF y ZF.
AND. Si ambos bits comparados son 1, establece el resultado en 1. Las dems
condiciones dan como resultado 0. OR. Si cualquiera (o ambos) de los bits comparados
es 1, el resultado es 1. Si ambos bits estn en 0, el resultado es 0. XOR. Si uno de los
bits comparados es 0 y el otro 1, el resultado es 1. Si ambos bits comparados son iguales
(ambos 0 o ambos 1), el resultado es 0. TEST. Establece las banderas igual que lo hace
AND, pero no cambia los bits de los operandos. Las operaciones siguientes AND, OR y
XOR ilustran los mismos valores de bits como operandos:
AND

OR

XOR

0101

0101

0101

0011

0011

0011

Resultado:

0001

0111

0110

Es til recordar la siguiente regla: el empleo de AND con bits 0 es 0 y el de OR con


bits 1 es 1. La instruccin NOT solo invierte los bits en un byte o palabra en un registro
o en memoria; esto es, convierte los ceros en unos y los unos en ceros. El formato
general es:
| [etiqueta:] | NOT | {registro/memoria} |

Ejemplos de operaciones booleanas. Para los siguientes ejemplos independientes,


suponga que AL contiene 11000101 y el BH contiene 01011100:
1.- AND
2.- OR
3.- XOR

AL,BH

; Establece AL a 0100 0100

BH,AL

; Establece BH a 1101 1101

AL,AL

; Establece AL a 0000 0000

La instruccin NOT solo invierte los bits en un byte o palabra en un registro o en


memoria; esto es, convierte los ceros en unos y los unos en ceros. El formato general es:
| [etiqueta:] | NOT | {registro/memoria} |

Por ejemplo si el AL contiene 11000101, la instruccin NOT AL cambia el AL a


00111010 (el resultado es el mismo de XOR AL, 0FFH). Las banderas no son afectadas.

You might also like