sábado, 2 de octubre de 2010

Precedencia de Operadores

La precedencia de operadores especifica como se agrupan las expresiones.

Por ejemplo en la siguiente sentencia:

int numero = 2 + 3 * 4;

El resultado es 14 y no 20. Significa que la multiplicación tiene mayor precedencia que la suma, primero se realiza 3 * 4 y al resultado de eso se le suma 2.
Esto se puede alterar incluyendo los paréntesis:

int numero2 = (2 + 3) + 4;

El resultado en este caso, es 20.

Cuando realizamos una condición también existen precedencias, detallo a continuación la lista de los operadores agrupados por orden de prioridad de mayor a menor, los operadores dentro de cada grupo tienen la misma prioridad.



Categorías

Operadores

Principal

x.y

f(x)

a[x]

x++

x--

new

typeof

checked

unchecked

->


Unario

+

-

!

~

++x

--x

(T)x


true


false


&


sizeof


Multiplicativo

*
/

%

Sumatorio

+


-


Desplazamiento

<<


>>


Comprobación de tipos y relaciones

< >

<=

>=

is

as

Igualdad

==

!=

AND lógico

&

XOR lógico

^

OR lógico

|

AND condicional

&&

OR condicional

||

Condicional

?:

Asignación

=

+=

-=

*=

/=

%=

&=

|=

^=

<<=

>>=

Uso combinado de Null

??

Lambda

=>

Por lo cual el siguiente condición daría TRUE:
bool verdadero1 = true;
bool verdadero2 = true;
bool falso = false;

if (falso && verdadero1 || verdadero2)
MessageBox.Show("true");
else
MessageBox.Show("false");

Primero evalúa falso y verdadero1 (false) y luego verdadero2.

1 comentario:

  1. Hay un pequeño error al final de este post. Donde dice, "Primero evalúa falso y verdadero1 (false) y luego verdadero2." sería cierto si el código de ejemplo fuera:

    if (falso & verdadero1 | verdadero2)
    MessageBox.Show("true");
    else
    MessageBox.Show("false");

    en el caso del operador &, éste evalúa las expresiones que tiene a ambos lados, pero el operador && sólo evalúa la expresión a su derecha si la de la izquierda es verdadera.
    En el caso del operador | es igual, evalúa ambas expresiones, pero el operador || sólo evalúa la expresión de la derecha si la de la izquierda es falsa. Lógicamente es lo mismo pero en el código no. Si la expresión de la derecha puede tirar una excepción si la de la izquierda es falsa, la excepción se evita usando el operador && en lugar de &.

    Saludos!

    ResponderEliminar