Decimal Lección 2 Introducción al lenguaje C Binario Hexadecimal Octal 0 0000 0 0 1 0001 1 1 2 0010 2 2 3 0011 3 3 4 0100 4 4 5 0101 5 5 6 0110 6 6 7 0111 7 7 8 1000 8 10 9 1001 9 11 10 1010 A 12 11 1011 B 13 12 1100 C 14 13 1101 D 15 14 1110 E 16 15 1111 F 17 Equivalencia entre decimal, binario, hexadecimal y octal. 1 2 Código ASCII (American Standard Code for Information Interchange) PALABRAS CLAVE O RESERVADAS Ejemplo: Estándar de 7 bits (128 caracteres) 95 caracteres imprimibles (del 32 al 126) 32 33 ! auto 44 , 56 8 68 D 80 P 92 \ 104 h 116 t 45 - 57 9 69 E 81 Q 93 ] 105 i 117 u double int struct break else long switch enum register typedef 34 " 46 . 58 : 70 F 82 R 94 ^ 106 j 118 v case 35 # 47 / 59 ; 71 G 83 S 95 _ 107 k 119 w char extern return union 36 $ 48 0 60 < 72 H 84 T 96 ` 108 l 120 x const float short unsigned 37 % 49 1 61 = 73 I 85 U 97 a 109 m 121 y 38 & 50 2 62 > 74 J 86 V 98 b 110 n 122 z continue for signed void { default goto sizeof volatile do if static while 39 ' 51 3 63 ? 75 K 87 W 99 c 111 o 123 40 ( 52 4 64 @ 41 ) 53 5 65 A 76 L 88 X 100 d 112 p 124 | 77 M 89 Y 101 e 113 q 125 } 42 * 54 6 66 B 43 + 55 7 67 C 78 N 90 Z 102 f 114 r 126 ~ 79 O 91 [ 103 g 115 s 3 4 IDENTIFICADORES ¿Qué identificadores son válidos? Son los nombres que se pueden dar a elementos del programa. Reglas para formar identificadores: 1. Soy un identificador 2. Yo_también 3. 1_primero 4. _dato1 5. V_=IxR 6. automovil 7. auto 8. ejemplo: - Sólo se pueden utilizar los siguientes caracteres: Letras: a-z o A-Z (la eñe no vale) Números: 0-9 Carácter de subrayado: _ - Primer carácter: letra o carácter de subrayado (nunca un número). - Tienen que ser distintos de las palabras clave. - Las mayúsculas y las minúsculas son diferentes para el compilador. Pepe, pepe y PEPE son identificadores distintos. 5 6 2.7 OPERADORES SECUENCIAS DE ESCAPE 2.7.1 ARITMÉTICOS Una secuencia de escape está formada por el carácter barra invertida \ seguida de una letra o una combinación de dígitos. Operador Secuencia \n \t \b \r \f \a \’ \” \\ \ooo \xhh Definición Retorno de carro y salto de línea Tabulador horizontal Retroceso (“backspace”) Retorno de carro sin salto de línea Alimentación de página para impresora Pitido Comilla simple Comilla doble Barra invertida (“backslash”) Carácter ASCII (o es un dígito octal) Carácter ASCII (h es un dígito hexadecimal) Operación + Suma - Resta * Multiplicación / División % Módulo (o resto) de una división de números enteros. Prioridad (o precedencia) de las operaciones: 1º. Paréntesis () (evaluados de más internos a más externos) 2º. Multiplicación *, división / y módulo %. 3º. Suma + y resta -. Asociatividad de izquierda a derecha. 7 8 2.7.3 INCREMENTALES 2.7.2 RELACIONALES - Se aplican a un solo operando, generalmente una variable entera. - Los operandos son datos numéricos de un tipo básico (int, float, etc.). Operador - El resultado de la operación es un valor booleano: verdadero o falso (1 ó 0). Operador Operación Operación ++ Incremento de una unidad. -- Decremento de una unidad. < ¿Primer operando menor que el segundo? > ¿Primer operando mayor que el segundo? <= ¿Primer operando menor o igual que el segundo? Operación >= ¿Primer operando mayor o igual que el segundo? x++ Post-incremento != ¿Primer operando distinto del segundo? ++x Pre-incremento == ¿Primer operando igual que el segundo? x-- Post-decremento --x Pre-decremento. - Dependiendo de la posición respecto del operando podemos distinguir: Significado 9 10 2.7.5 OPERADORES DE BITS 2.7.4 LÓGICOS - Los operandos son booleanos (1 ó 0). - Las operaciones se realizan sobre los bits de operandos enteros. - Un operando puede ser un variable o una constante numérica, en cuyo caso se evaluará como: Operador Operación Verdadero, si su valor es distinto de 0. & AND Falso, si su valor es igual a 0. | OR ^ XOR - El resultado de la operación es un valor booleano: verdadero o falso (1 ó 0). Operador Operación && AND || OR ! NOT Resultado Verdadero Falso Verdadero Falso Verdadero Falso Condición Si ambos operandos son verdaderos. Si uno de los operandos es falso. Si uno de los operandos es verdadero. Si ambos operandos son falsos. Si el operando es falso. Si el operando es verdadero. 11 << Desplazamiento a la izquierda rellenando con ceros por la derecha >> Desplazamiento a la derecha rellenando con el bit de signo por la izquierda ~ NOT (complemento a 1) 12 2.7.6 ASIGNACIÓN 2.7.7 OTROS OPERADORES - Asignan el valor de la expresión situada a la derecha del operador al operando situado a su izquierda. Operador condicional ? : - El valor de la expresión se convierte al tipo de datos del operando. - Sintaxis: Operador Ejemplo Operando1 ? Operando2 : Operando3 - Resultado de la operación: Significado = x=0 Asignación simple Operando 1 (booleano) Resultado de la operación *= x*=y x=x*y Verdadero Operando2 /= x/=3 x=x/3 Falso Operando3 %= x%=2 x=x%2 += x+=y x=x+y -= x-=2 x=x-2 <<= x<<=1 x=x<<1 >>= x>>=2 x=x>>2 &= x&=z x=x&z |= x|=y x=x|y ^= x^=y x=x^y - Ejemplo: int x = 5, y = 10, z = 0; z = (x > y) ? x : y ; //z = 10 z = (x != y) ? x : y ; /* z = 5 */ 13 14 Operador sizeof (“tamaño de”) - Proporciona el tamaño de su operando en bytes. - Sintaxis: sizeof (operando) - Operando: identificador o tipo de una variable Conversión forzada (o explícita) de tipo - Ejemplo: int x, y; y = sizeof (x); y = sizeof (int); y = sizeof (char); - Convierte una expresión a un tipo de datos. - Sintaxis: (tipo) expresión - Ejemplo: /* y = 4 */ /* y = 4 */ //y=1 float a=3.0; Operadores para tipos de datos avanzados (capítulo 4) double b=4.0; a=b; // El compilador da un aviso (warning) a=(float)b; // Mejor Operador 15 Uso [] Acceso a la componente de un vector o de una cadena de caracteres. . Acceso al miembro de una estructura. 16 Operadores para punteros (capítulo 5) 2.7.8 PRIORIDAD Y ORDEN DE EVALUACIÓN Operador & (“dirección de”) Operadores Asociatividad - Obtiene la dirección de memoria en la que está almacenado su operando. ( ) [ ] . -> Izquierda a derecha - ~ ! ++ -- (tipo) * & sizeof Derecha a izquierda * / % Izquierda a derecha + - Izquierda a derecha << >> Izquierda a derecha < <= > >= Izquierda a derecha == != Izquierda a derecha & Izquierda a derecha ^ Izquierda a derecha | Izquierda a derecha && Izquierda a derecha || Izquierda a derecha ?: Derecha a izquierda = *= /= %= += -= <<= >>= &= |= ^= Derecha a izquierda - Sintaxis: &operando - Ejemplo: int x=5, *p; // La variable p es un puntero. p=&x; // A p se le asigna la dirección de memoria de x // y se dice que p “apunta” a x. Operador * (“indirección”) - Proporciona el contenido de una dirección de memoria a partir de su puntero. - Sintaxis: *nombre_del_puntero - Ejemplo: int x=5, y=0, *p; p=&x; y=*puntero; // p apunta a x. // y = 5 17 18