Precedencia de operadores
La interpretación de cualquier expresión en C++
está determinada por la precedencia y asociativo de los operadores en dicha
expresión. Cada operador tiene una precedencia, y los operadores en una
expresión se evalúan en orden de mayor a menor precedencia. La evaluación de
operadores con la misma precedencia viene determinada por su asociativo Y, al
igual que en matemáticas, los paréntesis anulan las reglas de precedencia.
En la siguiente tabla se listan los operadores en C++, su precedencia y su asociativo Los operadores se listan en orden de prioridad decreciente (los situados más arriba tienen mayor prioridad). Los operadores en la misma línea horizontal tienen la misma precedencia.
En la siguiente tabla se listan los operadores en C++, su precedencia y su asociativo Los operadores se listan en orden de prioridad decreciente (los situados más arriba tienen mayor prioridad). Los operadores en la misma línea horizontal tienen la misma precedencia.
Operador
|
Propósito
|
Asociatividad
|
::
|
Scope
(unario)
|
De
derecha a izquierda
|
::
|
Scope
(binario)
|
De
izquierda a derecha
|
-> .
|
Selección
de miembros
|
De
izquierda a derecha
|
[]
|
Índices
|
De
izquierda a derecha
|
()
|
Llamada
a función
|
De
izquierda a derecha
|
++
|
Postincremento
|
De
izquierda a derecha
|
--
|
Postdecremento
|
De
izquierda a derecha
|
sizeof
|
Tamaño
de un objeto
|
De
derecha a izquierda
|
++
|
Preincremento
|
De
derecha a izquierda
|
--
|
Predecremento
|
De
derecha a izquierda
|
* &
+ - ! ~
|
Operadores
unarios
|
De
derecha a izquierda
|
new
|
Crea un
objeto
|
De
derecha a izquierda
|
delete
|
Borra
un objeto
|
De
derecha a izquierda
|
()
|
Conversión
de tipo (type cast)
|
De
derecha a izquierda
|
->*
.*
|
Puntero
a un miembro
|
De
izquierda a derecha
|
* / %
|
Operadores
multiplicativos
|
De
izquierda a derecha
|
+ -
|
Operadores
aditivos
|
De
izquierda a derecha
|
<<
>>
|
Operadores
bitwise
|
De
izquierda a derecha
|
<
> <= >=
|
Operadores
de relación
|
De
izquierda a derecha
|
== !=
|
Operadores
de igualdad
|
De
izquierda a derecha
|
&
|
Y
bitwise
|
De
izquierda a derecha
|
^
|
bitwise
O exclusivo
|
De
izquierda a derecha
|
|
|
bitwise
O inclusivo
|
De
izquierda a derecha
|
&&
|
Y
lógico
|
De
izquierda a derecha
|
||
|
O
lógico
|
De
izquierda a derecha
|
?:
|
Operador
condicional
|
De
derecha a izquierda
|
= *= /=
+= -= >*gt;=
&= ^= |= %= <<= |
Operadores
de asignación
|
De
derecha a izquierda
|
,
|
Operador
coma
|
De
derecha a izquierda
|
En C++ las reglas de precedencia y asociatividad de operadores
corresponden a las reglas matemáticas. Sin embargo, esto no funcionará, por
ejemplo, con los operadores bitwise. Para tales operadores, se debe utilizar la
tabla anterior, o bien paréntesis.
Orden de
precedencia
- La recomendación primera es utilizar paréntesis
siempre que se considere oportuno.
- En ausencia de ellos el orden de evaluación de
los operadores es el siguiente:
operadores unarios
|
++, - -, !, - , +,
casting
|
multiplicaciones y divisiones
|
*, /, %
|
sumas y restas
|
+, -
|
operadores relacionales
|
, , ,
|
comparaciones de igualdad
|
==, !=
|
`` y `` lógico
|
&&
|
``o'' lógico
|
|
condicional ternario
|
?
:
|
asignaciones
|
=, +=, -=, *=, /=,
%=
|
- Se operan primero ( tienen mayor precedencia ) lo
que se encuentran más arriba en la tabla.
- El último en evaluarse es la asignación.
Precedencia
de operadores
Cuando aparecen varias operaciones en
una expresión, cada parte se evalúa y se resuelve en un orden determinado
llamado prioridad de los operadores. Puede utilizar paréntesis para pasar por
alto el orden de prioridad y obligar a evaluar algunas partes de una expresión
antes que otras. Las operaciones entre paréntesis se realizan siempre antes que
las de fuera. Sin embargo, entre paréntesis se mantiene el prioridad normal de
los operadores.
Cuando las expresiones contienen
operadores de más de una categoría, los operadores aritméticos se evalúan
primero, los de comparación después y los lógicos los últimos. Todos los
operadores de comparación tienen la misma prioridad, es decir, se evalúan en el
orden de izquierda a derecha en el que aparecen. Los operadores aritméticos y
lógicos se evalúan en el siguiente orden de prioridad:
Aritmético
|
Comparación
|
Lógico
|
Negación (-)
|
Igualdad (=)
|
Not
|
Exponenciación (^)
|
Desigualdad (<>)
|
And
|
Multiplicación y división (*, /)
|
Menor que (<)
|
Or
|
División de número entero (\)
|
Mayor que (>)
|
Xor
|
Modelo aritmético (Mod)
|
Menor o igual que (<=)
|
Eqv
|
Suma y resta (+, -)
|
Mayor o igual que (>=)
|
Imp
|
Concatenación de cadenas (&)
|
Is
|
&
|
Cuando aparecen la multiplicación y la
división juntas en una expresión, se evalúa cada operación según aparece de
izquierda a derecha. Asimismo, cuando aparecen la suma y la resta juntas en una
expresión, cada operación se evalúa en orden de aparición de izquierda a
derecha.
El operador de concatenación de cadena
(&) no es un operador aritmético, pero por prioridad va después de
todos los operadores aritméticos y antes de todos los operadores de
comparación. El operador Is es un operador de comparación de referencias de objetos. No
compara objetos ni sus valores; sólo comprueba para determinar si dos referencias
de objetos hacen referencia al mismo objeto.
Las reglas de precedencia de las expresiones del lenguaje C nos dicen el orden en que el computador evalúa una expresión cuando hay más de un operador. Para expresiones aritméticas se siguen, lógicamente, las reglas de precedencia aritmética. Es decir, primero se aplica el operador de cambio de signo (-) , a continuación se calculan multiplicaciones y divisiones, y por último sumas y restas. Cuando hay dos operadores con la misma precedencia, se calcula primero la operación que está a la izquierda. Veamos algunos ejemplos:
IVA=PVP-PVP/1.16;
Tenemos una suma y una división. Siguiendo las reglas de precedencia aritmética, primero se calcula la división y después la suma. Si tenemos:
Z=-X+Z*2+N+Y/X-7;
El computador primero cambia de signo el valor de X. Después calcula la multiplicación (los operadores * y / tienen la misma precedencia, pero * está a la izquierda en esta expresión). Sigue con la división y por último hace las operaciones de suma y resta empezando por la izquierda de la expresión.
Se pueden utilizar paréntesis para cambiar la precedencia. Una expresión entre paréntesis tiene siguiente formato general:
(Expresión)
esto hace que el computador evalúe en primer lugar el contenido de los paréntesis. Los paréntesis se pueden anidar, esto es, se pueden colocar paréntesis dentro de expresiones entre paréntesis. En tal caso, se calcula en primer lugar el contenido de los paréntesis más internos. En
B=(K-Z*(n-1))*K;
El computador calcula primero la expresión n-1, sigue con el paréntesis más externo, y lo último que hace es multiplicar su contenido por K. Cuando tenemos varios paréntesis al mismo nivel de anidamiento, se evalúan empezando la izquierda. El computador calcula la expresión
Z=-(X+Z)*(2+N)+Y/(X-7);
Evaluando primero el contenido de los paréntesis antes de hacer las operaciones que hay fuera de ellos.
Esto es un resumen de la prioridad de las operaciones aritméticas, de mayor prioridad a menor prioridad:
1. ()
2. ! + - ++ -- (donde + y - son operadores unarios)
3. * / %
4. + - (donde + y - son operadores binarios)
5. < <= > >= =< =>
6. == !=
7. &&
8. ||
No hay comentarios:
Publicar un comentario