La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Tipos de Datos Básicos 1.

Presentaciones similares


Presentación del tema: "Tipos de Datos Básicos 1."— Transcripción de la presentación:

1 Tipos de Datos Básicos 1

2 Tipos de Datos Básicos MODIFICADORES DE TIPO 2

3 unsigned int unsigned etc.
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”. 3

4 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) ); } 4

5 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. 5

6 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. 6

7 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. 7

8 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 lista variables , 8

9 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 9

10 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. 10

11 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. 12

12 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 13

13 Variables: Reglas de Alcance
El lugar donde se declaran las variables condiciona la forma en que pueden ser utilizadas por otras partes del programa.

14 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. 15

15 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. 17

16 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.

17 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.

18 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 20

19 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. 21

20 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 22

21 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. 23

22 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 24

23 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) 25

24 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)

25 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

26 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.

27 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”) 26

28 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. 27

29 Operadores Aritméticos: Multiplicativos
Cuando / se aplica a dos operandos integrales se trunca la parte fraccionaria del resultado. Ejemplo: /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 28

30 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. 29

31 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. 30

32 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. 31

33 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: && y lógica || o lógica 32

34 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. 33

35 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 34

36 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. 35

37 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 36

38 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= e e1 = e1 op ( e2 ) 38

39 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) 37

40 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; 39

41 Precedencia de operadores
40

42 Precedencia de operadores
41

43 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. 42

44 double, float , long, int, short, char
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. 43

45 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. 45

46 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 44

47 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) 47

48 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. 46

49 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 48

50 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. 49

51 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. 50

52 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). 51

53 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. 52

54 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.

55 Tipos Enumerados operaciones 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 */

56 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.

57 typedef tipo lista_nombre;
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; 53

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. 54


Descargar ppt "Tipos de Datos Básicos 1."

Presentaciones similares


Anuncios Google