TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

58
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 1 de 58 Tipos de Datos Básicos Tipo de datos Descripción Requerim iento típico de m emoria Intervalo típico de valores int enteroscon signo 2 bytes de -32768 a 32767 char caracteres 1 byte de -128 a 127 float num s. realesen com a flotante de sim ple precisión 4 bytes de ~1.2E-38 a ~3.4E+38 double num s. realesen com a flotante de doble precisión (m áscifras significativasy posibilidad de m ayor exponente) 8 bytes de ~2.2E-308 a ~1.7E+308

Transcript of TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

Page 1: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 1 de 58

Tipos de Datos BásicosTipo de datos Descripción Requerimiento

típico de memoriaIntervalo típico

de valores

int enteros con signo 2 bytes de -32768 a 32767

char caracteres 1 byte de -128 a 127

floatnums. reales en coma

flotante de simpleprecisión

4 bytesde ~1.2E-38a ~3.4E+38

doublenums. reales en coma

flotante de dobleprecisión (más cifras

significativas yposibilidad de mayor

exponente)

8 bytes de ~2.2E-308a ~1.7E+308

Page 2: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 2 de 58

Tipos de Datos Básicos

Tipo de datos Requerimiento típicode memoria

Intervalo típicode valores

short int 2 bytes de -32.768 a 32.767

long int 4 bytesde -2.147.483.647a +2.147.483.648

unsigned int 2 bytes de 0 a 65535

unsigned long int 4 bytes de 0 a 4.294.967.295

unsigned char 1 byte de 0 a 255

MODIFICADORES DE TIPO

Page 3: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 3 de 58

Tipos de Datos Básicos

Tratándose de enteros, se pueden utilizar las palabras unsigned, short o long sin el identificador int, p.e.:

unsigned int unsigned etc. Se pueden mezclar caracteres y enteros en expresiones

aritméticas:int n; char c;n = 10 * n + c - ‘0’;

Todos estos tipos de datos son llamados colectivamente “tipos aritméticos”

Los tipos enteros y el tipo char se denominan “tipos integrales”.

Page 4: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 4 de 58

Tipos de Datos Básicos

Se dispone de un operador sizeof que devuelve en bytes el tamaño del tipo de datos o expresión que se le pasa como parámetro.

Su sintaxis es: sizeof( nombre_de_tipo )sizeof expresión

Ejemplo:main(){

printf( “El tamaño de short es %d bytes\n”,

sizeof(short) );}

Page 5: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 5 de 58

Variables

Una variable se corresponde con una cierta región de memoria que puede almacenar cualquier valor de entre un cierto conjunto de valores denominado rango.

La región de memoria que representa una variable se asocia a un identificador al que se hace referencia en el programa.

El rango de valores de una variable depende del tipo de la variable.

Page 6: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 6 de 58

Variables: Declaración y Definición

La declaración de una variable especifica su nombre y tipo, pero no reserva necesariamente espacio de almacenamiento.

La definición de una variable especifica su nombre y tipo y reserva espacio para su almacenamiento.

Sintaxis de las variables.

tipo lista variables

clase de

almacenamiento

Todas las variables deben ser declaradas antes de que aparezcan en sentencias ejecutables.

Page 7: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 7 de 58

Variables: Declaración y Definición

Sintaxis del tipo

modificador modificador tipo

modo de tipo base

acceso

El tipo especifica el tipo de datos de cada una de las variables de la lista subsiguiente. En caso de no especificar nada se considera que el tipo es int.

Page 8: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 8 de 58

Variables: Declaración y Definición

La lista de variables consiste en la secuencia de los correspondientes identificadores (y opcionalmente inicializaciones) separados por comas.

identificador

variable

inicialización

variable

,

lista variables

Page 9: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 9 de 58

Variables: Declaración y Definición

En la definición de una variable se puede especificar un valor inicial en forma de una expresión.

= expresión

inicializar variable

Page 10: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 10 de 58

Variables: Modos de Acceso

Se definen dos modificadores de acceso para controlar la forma en que se accede a las variables

const: una variable así declarada no se puede modificar durante la ejecución del programa; únicamente puede dársele un valor inicial en su definición.

const unsigned int y = 3;

volatile: Se utiliza para indicar al compilador que el valor de una variable puede cambiar por medios no especificados explícitamente en el programa.

Page 11: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 11 de 58

Variables: Clases de Almacenamiento

En “C” hay dos formas de caracterizar las variables:

tipo de datos y clase de almacenamiento.

El tipo de datos se refiere a la información representada por una variable.

Page 12: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 12 de 58

Variables: Clases de Almacenamiento

La clase de almacenamiento se refiere al ámbito (reglas de alcance) y permanencia de la variable dentro del programa.

La clase de almacenamiento especifica la forma en que se deben almacenar las variables, siendo los posibles especificadores:

extern, static, auto, register

Page 13: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 13 de 58

Variables: Reglas de Alcance

El lugar donde se declaran las variables condiciona la forma en que pueden ser utilizadas por otras partes del programa.

Page 14: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 14 de 58

Variables: Reglas de Alcance

Existen tres partes donde se puede declarar una variable:

Fuera de todas las funciones incluida la función main(); este tipo de variable es global y se puede utilizar en cualquier parte del programa.

Dentro de las funciones; estas variables se denominan locales y sólo se pueden utilizar dentro del bloque en que se declaran.

Como parámetros formales de funciones; se utilizan para recibir argumentos cuando se invoca a una función.

Page 15: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 15 de 58

Variables: clase de almacenamiento extern

El lenguaje permite que se enlacen distintos módulos de un programa después de haber sido compilados independientemente.

Como consecuencia de lo anterior tiene que existir alguna forma de indicar cuáles son las variables globales de un programa para que exista una sola copia de las mismas.

La solución es el especificador extern, que indica que las variables a las que acompaña se definen en algún otro lugar.

Page 16: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 16 de 58

Variables: clase de almacenamiento extern

En lo que se refiere a las variables que se pueden compartir entre ficheros (variables externas), hay que distinguir entre una declaración que es también definición y una declaración externa.

Una variable externa es una variable global, que se define con una declaración normal que aparece fuera, y normalmente antes, de las funciones que la utilizan.

Page 17: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 17 de 58

Variables: clase de almacenamiento extern

La definición de una variable externa es una declaración, cuyo ámbito (como declaración) se limita al fichero en que aparece, que indica al compilador que tiene que reservar espacio de almacenamiento

Debe existir una sola definición de cada variable externa entre todos los ficheros que constituyen el programa.

Page 18: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 18 de 58

Variables: clase de almacenamiento extern

La declaración externa de una variable externa es una declaración, cuyo ámbito se limita al bloque o al fichero en que se incluye, que indica al compilador que no tiene que reservar espacio de almacenamiento.

Una declaración externa de una variable empieza con el especificador extern y su tipo tiene que coincidir con el indicado en su definición (que se encuentra en otro fichero).

Sólo se puede inicializar una variable externa en su definición:

fichero1 fichero2

int y = 0; extern int y;

se refieren a la misma variable

Page 19: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 19 de 58

Variables: clase de almacenamiento static

Las variables de clase static tienen almacenamiento permanente pero alcance restringido.

Cuando se define como static una variable interna se genera almacenamiento permanente para ella de tal forma que mantiene su valor entre ejecuciones sucesivas del bloque en que está definida, y su ámbito se limita a este bloque.

Cuando se define como static una variable externa se genera almacenamiento permanente para ella y su ámbito se limita al fichero en que está definida.

Page 20: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 20 de 58

Variables: clase de almacenamiento static

Si no existiesen variables locales estáticas se tendrían que utilizar variables globales, con los efectos secundarios que esto comporta.

Ejemplo

fichero1 fichero2 fichero3

static int i = 0; extern int i; int i=0;

La variable i de fichero1 no es la variable a la que se hace referencia en fichero2

La variable i de fichero2 y fichero3 sí es la misma

Page 21: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 21 de 58

Variables: clase de almacenamiento auto

Las variables (locales) automáticas se crean cada vez que se entra en el bloque en el que han sido definidas y desaparecen cuando se sale de él

No conservan su valor de una ejecución del bloque a la siguiente, y sólo son accesibles en el interior del bloque en el que se definen.

Si en la definición de una variable local no se especifica la clase de almacenamiento, por defecto se toma por auto.

Page 22: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 22 de 58

Variables: clase de almacenamiento register

Cuando a una variable se añade el especificador register se indica al compilador que la almacene en algún registro de la CPU.

El especificador register sólo se puede aplicar a variables automáticas, o a los parámetros formales de una función.

Cuando las variables declaradas como register no se pueden almacenar en registros de la CPU se toman por auto y se almacenan en memoria.

Dado que el acceso a variables de este tipo es muy rápido son ideales para el control de bucles

Page 23: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 23 de 58

Variables: Generalidades

Las variables estáticas y externas se inicializan una

única vez al comienzo del programa; si no se

inicializan explícitamente se inicializan a 0.

Las variables automáticas y de clase register se

inicializan cada vez que se ejecuta el bloque donde

están definidas. Si la inicialización no es explícita, se

inicializan con valores indefinidos (basura)

Page 24: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 24 de 58

ELEMENTOS SINTÁCTICOS BÁSICOS Constantes y Strings Las constantes son valores fijos que no pueden alterarse

durante la ejecución del programa.

Las constantes de tipo numérico deben cumplir las normas siguientes:– no pueden incluir comas ni espacios en blanco,– pueden ir precedidas del signo ( - ),– no pueden exceder de un límite máximo y mínimo especificado.

Las constantes enteras pueden escribirse en decimal, en octal (comienzan por 0) y en hexadecimal (comienzan por 0x o 0X)

Page 25: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 25 de 58

ELEMENTOS SINTÁCTICOS BÁSICOS: Constantes y Strings

Una constante entera sin signo se identifica añadiéndole la

letra U o u al final.

Una constante entera larga se identifica añadiéndole la letra L

o l al final.

Una constante real es un número en base 10 que contiene un

punto decimal y/o un exponente entero (separado de la

mantisa con una E o una e) y opcionalmente un signo. Se

considera de doble precisión si no termina por la letra F o f

Page 26: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 26 de 58

ELEMENTOS SINTÁCTICOS BÁSICOS: Constantes y Strings

Una constante carácter se escribe como un solo carácter encerrado entre comillas simples.

Una constante cadena de caracteres se escribe como una secuencia de cualquier número de caracteres consecutivos, encerrada entre comillas dobles.

Page 27: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 27 de 58

Operadores Aritméticos: Aditivos

Los operadores aritméticos aditivos:+ (suma) - (resta)

son binarios, por lo que requieren dos operandos.

Los operandos pueden ser expresiones de cualquier tipo de datos básico:char int short long unsigned float double

También puede tener sentido sumar o restar una expresión de cualquier tipo integral (char, int, short, long, unsigned) a un puntero a un elemento de un array (un uso de la llamada “aritmética de punteros”)

Page 28: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 28 de 58

Operadores Aritméticos: Multiplicativos

Los operadores aritméticos multiplicativos (siempre

binarios) son los siguientes:

* (producto) / (cociente) % (resto de división entera)

Los operadores * y / pueden trabajar sobre expresiones de

cualquier tipo de datos básico.

Page 29: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 29 de 58

Operadores Aritméticos: Multiplicativos

Cuando / se aplica a dos operandos integrales se trunca la parte fraccionaria del resultado.

Ejemplo: 7/2 = 3; 7./3 = 2.33….

Los operandos de % deben ser expresiones de tipo integral (el segundo, no nulo). En general el resultado siempre lleva el signo del numerador.

Ejemplos: 7%3 = 1; (-7)%3 = -1;

7%(-3) = 1; (-7)%(-3) = -1

Page 30: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 30 de 58

Operadores Aritméticos:Cambio de Signo

Los únicos operadores aritméticos unarios (que requieren

un solo operando) son - y + (el segundo fue nuevo en el

estándar ANSI). El - produce el cambio de signo del

operando.

El operando puede ser una expresión de cualquier tipo de

datos básico.

Page 31: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 31 de 58

Operadores Relacionales

Existen 4 operadores relacionales, todos ellos binarios:Operador Significado < menor que <= menor o igual que > mayor que >= mayor o igual que

Se pueden aplicar a expresiones de cualquier tipo de datos básico.

Page 32: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 32 de 58

Operadores Relacionales

El resultado de estos operadores es 0 cuando la

relación especificada es falsa y 1 cuando es cierta (el

tipo del resultado es int, en “C” no hay booleano).

También es posible comparar punteros, dependiendo el

resultado de la posición relativa de los objetos

apuntados en el espacio de direcciones del programa.

Page 33: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 33 de 58

Operadores Relacionales y Lógicos

Los operadores de igualdad también son binarios:Operador Significado == igual que != distinto de

Los operadores lógicos son binarios; también se llaman conectivas lógicas:

Operador Significado && y lógica || o lógica

Page 34: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 34 de 58

Operadores Relacionales y Lógicos

Los operandos no tienen por qué ser del mismo tipo, y

pueden ser expresiones de cualquier tipo de datos básico.

El único operador lógico unario es la negación lógica !.

Devuelve 1 si el operando es 0 y 0 si el operando es

distinto de 0.

Page 35: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 35 de 58

Operadores de Manejo de Bits

Como el lenguaje también fue diseñado para sustituir al lenguaje ensamblador en la mayoría de las tareas de programación, dispone de operadores especiales para manejar bits, siendo éstos:

Operador Significado Operador Significado & and bit a bit | or bit a bit

^ xor bit a bit << despl. a la izda. >> desp. a la drcha. ~ complemento a 1

Se pueden aplicar a cualquier operando de tipo integral

Page 36: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 36 de 58

Operadores de Manejo de Bits

Los operadores de desplazamiento de bits desplazan los bits del operando izquierdo tantas posiciones como indique el operando derecho.

n << 2

Cuando el desplazamiento es hacia la izquierda se añaden 0`s por la derecha y, en general, viceversa.

Page 37: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 37 de 58

Operadores de Manejo de Bits: Advertencia

Dado que la precedencia de los operadores de manejo de bits es menor que la de los operadores de igualdad, las expresiones de comprobación de bits deben encerrarse entre paréntesis:

x & mascara == 0 <#> (x & mascara) == 0

Page 38: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 38 de 58

Operadores y Expresiones de Asignación

Los operadores de asignación son todos binarios y son:= += -= *= /= %= aritméticos>>= <<= &= ^= |= manejo de bits

El valor del operando derecho se convierte al tipo del operando izquierdo.

Los operadores de asignación requieren que el operando izquierdo sea una referencia a una zona de almacenamiento (un lvalue) y no una expresión cualquiera.

Expresiones de asignación del tipo e1 op= e2 son abreviaturas: e1 op= e2 e1 = e1 op ( e2 )

Page 39: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 39 de 58

Operadores de Incremento y Decremento

El lenguaje dispone de dos operadores unarios para incrementar y decrementar variables de cualquier tipo de datos básico y punteros:

Operador Significado ++ incremento -- decremento

Estos operadores incrementan o decrementan en una la variable a la que están asociados.

Se pueden aplicar como prefijo o como sufijo:++n --nn prefijos (incrementan antes de usar)n++ n-- sufijos (incrementan después de usar)

Page 40: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 40 de 58

Expresiones Condicionales El lenguaje dispone de un operador condicional ( ?: )

para evaluar alternativas. Su sintaxis es:expresión1 ? expresión2 : expresión3

Se evalúa expresión1 y si es distinta de 0 (true) el resultado de la expresión condicional es expresión2. Si el resultado de expresión1 es 0 (false) el resultado es expresión3.

Suelen aparecer en la parte derecha de una sentencia de asignación simple. Se asigna al identificador de la izquierda el valor de la expresión condicional.

min = ( f < g ) ? f : g;

Page 41: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 41 de 58

Precedencia de operadores

Precedencia Asociatividad

( ) [ ] -> . I-D

- ! ++ -- (tipo) & sizeof * D-I

* / % I-D

+ - I-D

<< >> I-D

< <= > >= I-D

== != I-D

& (and a nivel de bits) I-D

Page 42: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 42 de 58

Precedencia de operadores

Precedencia Asociatividad

^ (or exclusiva a nivel de bits) I-D

| (or a nivel de bits) I-D

&& I-D

|| I-D

? : (operador condicional) D-I

= += -= *= /= %=>>= <<= &= ^= |=

D-I

, I-D

Page 43: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 43 de 58

Precedencia de operadores

Los operadores situados en la misma fila tienen la

misma precedencia.

Las filas están ordenadas de mayor a menor

precedencia.

A igualdad de precedencia los operadores se

agrupan de acuerdo a su asociatividad.

Page 44: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 44 de 58

Conversiones de tipos

Cuando se mezclan operandos de diferentes tipos se produce una conversión. Las reglas son:

En cualquier operación en que se mezclan operandos de diferentes tipos se produce una conversión del tipo inferior al tipo superior antes de efectuarse la operación, siendo este último el tipo del resultado.

El rango o categoría de tipos de mayor a menor es:double, float , long, int, short, char

En una sentencia de asignación, el resultado final de los cálculos se reconvierte al tipo de la variable a la que van a ser asignados.

Page 45: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 45 de 58

Conversiones de Tipos:Operador de Moldeado

El operador de moldeado (o cast) sirve para forzar conversiones explícitas del tipo de una expresión.

Su sintaxis es: ( tipo de datos ) expresión .

El resultado de la expresión se convierte al tipo de datos especificado entre paréntesis.

Tiene la misma precedencia que el resto de los operadores unarios.

Page 46: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 46 de 58

Conversiones de tipos: Advertencias

Una asignación que implica una conversión de tipos

conlleva una promoción o pérdida de rango del valor

asignado, según el tipo de la variable a la que se asigna.

La promoción suele ser inocua, suele pasar inadvertida.

La pérdida de rango puede provocar auténticas catástrofes

Page 47: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 47 de 58

Conversión de Tipos:Parámetros de Funciones

Como los parámetros actuales en las llamadas a funciones también son expresiones, se les pueden aplicar las reglas de conversión de tipos.

En ANSI C, los parámetros formales de las funciones se pueden declarar mediante un prototipo de la función, y por tanto se realizan comprobación de tipos y conversiones entre parámetros formales y actuales; ejemplo:

int nombre_funcion (int para1, char para2)

Page 48: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 48 de 58

Conversión de tipos

Para Obtener Desde Observaciones

char unsigned char Si el valor > 127, el resultado es negativo

char short int Se pierden los 8 bits más significativos

char int Se pierden los 8 bits más significativos

char long int Se pierden los 24 bits más significativos

short int long int Se pierden los 16 bits más significativos

int float Se pierde la parte fraccionaria (resultado indefinido si el valor no se ajusta al rango

de int)

float double Se redondea o se trunca, dependiendo de la implementación, según la precisión del

resultado (resultado indefinido si el valor no se ajusta al rango de float)

Nota: Para esta tabla se ha considerado una anchura de palabra de 16 bits.

Page 49: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 49 de 58

Conversiones de Tipos:Enteros Sin Signo

Para Obtener Desde Valor Resultado

unsigned short positivo no cambia

unsigned short negativo depende de la representación

int unsigned dentro del rango del int no cambia

int unsigned fuera del rango depende de la representación

long unsigned dentro del rango no cambia

long unsigned fuera del rango depende de la representación

unsigned long positivo no cambia

unsigned long negativo depende de la representación

Page 50: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 50 de 58

Precedencia y Orden de Evaluación

En la mayoría de los lenguajes no se especifica el orden de evaluación de los operandos de los operadores.

El resultado de evaluar una expresión que incluye operadores de asignación y de incremento o decremento puede depender del orden de evaluación de las operaciones implicadas.

En “C” no se especifica el orden de evaluación de los parámetros de las funciones.

Page 51: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 51 de 58

Precedencia y Orden de Evaluación: Advertencias

Cuidado con los efectos laterales producidos por las expresiones

de asignación y los operadores de incremento y/o decremento.

Cuidado con la escritura de programas cuyos resultados dependen

del orden de evaluación de los operandos. Los resultados

intermedios deben guardarse en variables temporales.

Page 52: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 52 de 58

Tipos Enumerados

Es posible declarar una lista de constantes enteras con un nombre asociado mediante la declaración de tipos enumerados.

El tipo enumerado es una lista de símbolos cuya sintaxis es

enum etiqueta { lista_id_ctes } lista_variables;

La etiqueta especifica el nombre del tipo y es opcional.

En las variables de un tipo enumerado sólo se deben almacenar constantes especificadas para ese tipo (pero el estándar no obliga al compilador que lo compruebe).

Page 53: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 53 de 58

Tipos Enumerados

La etiqueta se puede usar para declarar variables de ese

tipo en otros puntos del programa.

No se debe olvidar que cada símbolo de lista_id_ctes

representa internamente un valor entero y por tanto puede

utilizarse en cualquier expresión entera.

Page 54: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 54 de 58

Tipos Enumerados:operaciones válidas

Se puede asignar una constante de un tipo enumerado a una variable del mismo tipo:

enum felinos { gato = 15, tigre, leon, puma};enum felinos mascota;mascota = gato;

Se pueden utilizar los operadores de igualdad:if (mascota == gato) .....if (mascota != leon) .....

Se pueden utilizar operadores aritméticos con constantes de un tipo enumerado.

Page 55: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 55 de 58

Tipos Enumeradosoperaciones que no conviene realizar

No conviene utilizar los operadores de asignación (excepto =). mascota += gato /* advertencia */

No conviene utilizar los operadores de relación. if (mascota > puma) .... /* advertencia */

No conviene utilizar los operadores aritméticos. mascota = mascota + gato; /* advertencia */

Normalmente no conviene utilizar una constante de un tipo enumerado como subíndice de un array. fichas[rojo] = 23; /* desaconsejado */

Page 56: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 56 de 58

Tipos Enumerados:Utilización

Contribuyen a la legibilidad de los programas

Se utilizan normalmente para uso interno de los programas y no en E/S.

Page 57: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 57 de 58

Definición de Tipos

Cuando a una declaración de variables precede la palabra

typedef, los identificadores especificados no se refieren a

variables, sino a nombres de tipos de datos.

Estos nombres de tipos pueden usarse posteriormente en la

declaración de variables o en conversiones de tipos.

Su sintaxis es:

typedef tipo lista_nombre;

Page 58: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.

TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 58 de 58

Definición de Tipos

El alcance de la definición depende de la localización de la

sentencia typedef. Si se realiza dentro de una función, el

alcance queda confinado a la misma. Si la definición es

externa (a toda función) el alcance es global.

Este proceso ayuda a que los programas sean menos

dependientes de la máquina y por tanto más transportables.