Anda di halaman 1dari 4

Curso de C++ - Operadores III: Precedencia

http://c.conclase.net/curso/?cap=014#inicio

C++ con Clase Curso de C++ Curso de C++ Estilo: Visitas desde 2000-09-09 Usuarios en lnea Con Clase C++ Win API 32 HTML y CSS Grficos MySQL Artculos Listas << < > >> Curso Info Bibliotecas Tabla Comentario Introduccin 1 Toma de contacto 2 Tipos de variables I 3 Funciones I 4 Operadores I 5 Sentencias 6 Declaracin de variables 7 Notacin 8 Cadenas de caracteres 9 Conversin de tipos 10 Variables II: Arrays 11 Objetos III: Estructuras 12 Objetos IV: Punteros 1 13 Operadores II 14 Oper III: Precedencia Ejercicios 14 15 Funcs II: valor y referencia 16 Variables V: Uniones 17 Variables VI: Punteros 2 18 Operadores IV 19 Definicin de tipos 20 Funciones III: ms cosas

1 de 4

21/07/2013 19:33

Curso de C++ - Operadores III: Precedencia

http://c.conclase.net/curso/?cap=014#inicio

21 Funciones IV: Sobrecarga 22 Operadores V: Sobrecarga 23 El preprocesador 24 Funciones V: Recursividad 25 Vbls VII: Almacenamiento 26 Espacios con nombre 27 Clases I: definiciones 28 Declaracin de una clase 29 Constructores 30 Destructores 31 El puntero this 32 Sistema de proteccin 33 Modificadores 34 Ms sobre las funciones 35 Operadores sobrecargados 36 Herencia 37 Funciones virtuales 38 Derivacin mltiple 39 Trabajar con ficheros 40 Plantillas 41 Punteros a miembros 42 Castings en C++ 43 Manejo de excepciones A Codificacin ASCII B Palabras reservadas C Bibliotecas estndar D Trigrafos y smbolos alt. E Streams

14 Operadores III: Precedencia


^ Normalmente, las expresiones con operadores se evalan de izquierda a derecha, aunque no todos, ciertos operadores que se evalan y se asocian de derecha a izquierda. Adems no todos los operadores tienen la misma prioridad, algunos se evalan antes que otros, de hecho, existe un orden muy concreto en los operadores en la evaluacin de expresiones. Esta propiedad de los operadores se conoce como precedencia o prioridad. Veremos ahora las prioridades de todos los operadores incluidos los que an conocemos. Considera esta tabla como una referencia, no es necesario aprenderla de memoria, en caso de duda siempre se puede consultar, incluso puede que cambie ligeramente segn el compilador, y en ltimo caso veremos sistemas para eludir la precedencia. Operadores () [] -> :: . Operadores unitarios: ! ~ + - ++ -- & (direccin de) * (puntero a) sizeof new delete .* ->* Asociatividad Izquierda a derecha Derecha a izquierda Izquierda a derecha

2 de 4

21/07/2013 19:33

Curso de C++ - Operadores III: Precedencia

http://c.conclase.net/curso/?cap=014#inicio

* (multiplicacin) / % + - (operadores binarios) << >> < <= > >= == != & (bitwise AND) ^ (bitwise XOR) | (bitwise OR) && || ?: = *= /= %= += -= &= ^= |= <<= >>= ,

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 Izquierda a derecha

La tabla muestra las precedencias de los operadores en orden decreciente, los de mayor precedencia en la primera fila. Dentro de la misma fila, la prioridad se decide por el orden de asociatividad. La asociatividad nos dice en que orden se aplican los operadores en expresiones complejas, por ejemplo:
int a, b, c, d, e; b = c = d = e = 10;

El operador de asignacin "=" se asocia de derecha a izquierda, es decir, primero se aplica "e = 10", despus "d = e", etc. O sea, a todas las variables se les asigna el mismo valor: 10.
a = b * c + d * e;

El operador * tiene mayor precedencia que + e =, por lo tanto se aplica antes, despus se aplica el operador +, y por ltimo el =. El resultado final ser asignar a "a" el valor 200.
int m[10] = {10,20,30,40,50,60,70,80,90,100}, *f; f = &m[5]; ++*f; cout << *f << endl;

La salida de este ejemplo ser, 61, los operadores unitarios tienen todos la misma precedencia, y se asocian de derecha a izquierda. Primero se aplica el *, y despus el incremento al contenido de f.
f = &m[5]; *f--; cout << *f << endl;

La salida de este ejemplo ser, 50. Primero se aplica el decremento al puntero, y despus el *.
a = b * (c + d) * e;

Ahora el operador de mayor peso es (), ya que los parntesis estn en el grupo de mayor precedencia. Todo lo que hay entre los parntesis se evala antes que cualquier otra cosa. Primero se evala la suma, y despus las multiplicaciones. El resultado ser asignar a la variable "a" el valor 2000. Este es el sistema para eludir las precedencias por defecto, si queremos evaluar antes una suma que un producto, debemos usar parntesis.

3 de 4

21/07/2013 19:33

Curso de C++ - Operadores III: Precedencia

http://c.conclase.net/curso/?cap=014#inicio

Septiembre de 2000, Salvador Pozo, salvador@conclase.net

4 de 4

21/07/2013 19:33