Variables - Tipos de Datos Operadores - Precedencia Alejandro Furfaro Mayo 2011 Alejandro Furfaro () Variables - Tipos de Datos -Operadores - Precedencia Mayo 2011 1 / 12 Agenda 1 2 Alejandro Furfaro () Tipos de Datos Macros para declarar valores constantes Variables en memoria Operadores Asignación Precedencia Variables - Tipos de Datos -Operadores - Precedencia Mayo 2011 2 / 12 Tipos de Datos Pocos y Simples Bit char int float double Descripción Es un byte capaz de albergar un valor correspondiente al set de caracteres que se utiliza (ASCII por ejemplo). Refleja el tamaño de los números enteros en la máquina en la que se trabaja. En máquinas con procesadores Intel su tamaño es de 32 bits. En otras plataformas puede tener 16 bits de tamaño. Aloja un número en punto flotante simple densidad. Aloja un número en punto flotante doble densidad. Alejandro Furfaro () Variables - Tipos de Datos -Operadores - Precedencia Mayo 2011 3 / 12 Tipos de Datos Calificadores Bit short long signed unsigned Alejandro Furfaro () Descripción Aplica naturalmente a enteros. En tal caso podemos omitir “int”. Ej. short var1, Aplica naturalmente a enteros. En tal caso podemos omitir “int”. Ej. long var2, etc. En el caso de las variables double, el modificador long permite en algunas plataformas definir variables en el formato punto flotante de 96 o 128 bits según como se compile. Aplica a variables char e int para definir variables enteras sin signo (solo valores 0 o superiores). Aplica a variables char e int para definir variables enteras con signo. Variables - Tipos de Datos -Operadores - Precedencia Mayo 2011 4 / 12 Tipos de Datos Macros para declarar valores constantes La directiva #define al Pre procesador / ∗ c o n s t a n t e asumida como e n t e r o ∗ / # define e n t e r o 1234; / ∗ c o n s t a n t e asumida como l o n g ( terminada en L ) ∗ / # define e n t e r o l a r g o 1234L ; / ∗ c o n s t a n t e asumida como unsigned l o n g ( terminada en UL ) ∗ / # define 1234UL ; / ∗ c o n s t a n t e asumida como e n t e r o expresada en hexadecimal ∗ / # define e n t e r o e n h e x a 0x1234 ; / ∗ c o n s t a n t e con e l ASCII de l a e q u i s ∗ / # define e q u i s ’ x ’ ; / ∗ Constante con una cadena ASCII ∗ / # define cadena Hola Mundo ! ! ; Alejandro Furfaro () Variables - Tipos de Datos -Operadores - Precedencia Mayo 2011 5 / 12 Tipos de Datos Macros para declarar valores constantes Macros implı́citas de Caracteres Particulares Ciertos caracteres especiales se representan precedidos por el carácter de escape ’\’. Ej: \n. A simple vista parece tratarse de dos caracteres pero se interpretan como uno. \a alerta (beep) \\ backslash \b backspace \? Signo de pregunta \f Nueva Hoja \’ Comilla Simple \n Nueva Lı́nea \“ Comilla doble \r Retorno de carro (formfeed) \ooo Número octal \t Tab horizontal \xhh Número Hexadecimal \v Tab Vertical Alejandro Furfaro () Variables - Tipos de Datos -Operadores - Precedencia Mayo 2011 6 / 12 Tipos de Datos Macros para declarar valores constantes Constantes de enumeración Se puede declarar una secuencia de valores enteros. enum boolean {NO, SI } / / NO=0 , SI =1. enum meses {Enero =1 , Febrero , Marzo , A b r i l , Mayo , Junio , J u l i o , Agosto , Setiembre , Octubre , Noviembre , Diciembre } / / Febrero =2 , Marzo= 3 , . . . Ventajas. El compilador asigna valores secuencialmente a partir del primero. Alejandro Furfaro () Variables - Tipos de Datos -Operadores - Precedencia Mayo 2011 7 / 12 Tipos de Datos Variables en memoria Variables y Tipos de datos Se pueden definir una por lı́nea de programa: /∗ t r e s enteros ∗/ i n t lower ; i n t upper ; i n t step ; O bien en una lı́nea: /∗ t r e s enteros ∗/ i n t lower , upper , s t e p ; Un solo caracter.... o un vector de caracteres (mil en este caso) char c ; char v [ 1 0 0 0 ] ; Y constantes en memoria (a diferencia de las macros estas ocupan una dirección) const double e = 2.71828182845905; const char msg [ ] = ” warning : ” ; Alejandro Furfaro () Variables - Tipos de Datos -Operadores - Precedencia Mayo 2011 8 / 12 Operadores Asignación Setean un valor en una variable Aritméticos: + , - , * , / , % , Suma, resta, producto, cociente, y resto i = j + i; /* asigna a i la suma entre j e i */ i += j; /* Esta sentencia es equivalente... ¡Bienvenidos al C!*/ k=9*p; z = x % y ; /* z se carga con el resto del cociente entre x e y*/ Lógicos: & bitwise AND h &= mask; | bitwise OR reg = reg |0x40; ˆ bitwise OR exclusiva a ˆ= b; << Desplazamiento a la izquierda x << 2; >> Desplazamiento a la derecha y >> p; Complemento a 1 a = ˜700; ˜ Incremento / Decremento: ++ , – Supongamos una variable n definida e inicializada como: int n=3; p = n++; /* Luego de esta sentencia, p queda inicializado en 3 y n en 4*/ p = ++n; /* Luego de esta sentencia, p queda inicializado en 4 y n en 4 */ Alejandro Furfaro () Variables - Tipos de Datos -Operadores - Precedencia Mayo 2011 9 / 12 Operadores Asignación Relacionales >, >=, <, <=, ==, ! = Se utilizan para evaluar condiciones en sentencias que debe tomar una decisión en función del resultado. Su resultado es un operador booleano (Verdadero / Falso, 0 / 1, etc) Alejandro Furfaro () Variables - Tipos de Datos -Operadores - Precedencia Mayo 2011 10 / 12 Operadores Precedencia Como se evalúan las expresiones Alejandro Furfaro () Variables - Tipos de Datos -Operadores - Precedencia Mayo 2011 11 / 12 Operadores Precedencia Ejemplos de precedencias if((x & MASK)==0) Si quitamos los paréntesis (), ¿Se altera el resultado?. Respuesta: SI ¿Porqué?: Porque & tiene menos precedencia que ==. Entonces aunque recorra de izquierda a derecha la expresión, el compilador primero resolverá la comparación y luego la operación lógica del resultado de la misma con x. If ((a < b)&& (c <= b)) ¿Son redundantes los paréntesis ()?. Rta: SI. ¿Porque?.... Alejandro Furfaro () Variables - Tipos de Datos -Operadores - Precedencia Mayo 2011 12 / 12