Evaluación de una expresión

Es importante conocer la forma en la que son evaluadas las expresiones para saber dónde pueden ser necesarios o no paréntesis que indiquen el modo en el que se pretende que la expresión sea evaluada.

En el lenguaje, una expresión puede contener operadores de diferentes niveles de prioridad.

En la evaluación de una expresión serán siempre procesados primero los de prioridad 1 (si los hay), luego los de prioridad 2, tras estos los de prioridad 3 y, así, sucesivamente.

Prioridad 1
     ( ) Paréntesis, inicio y fin de una sub-expresión

Prioridad 2
     . Punto, operador de acceso a datos locales y estructuras

Prioridad 3
     NOT Negación binaria y lógica (#1045,!)
     OFFSET Dirección o desplazamiento (#1050,&)
     ^ Operador de indirección (*, [ ])
     - Negación de signo
     ++ Operador de incremento
     -- Operador de decremento

Prioridad 4
     * Multiplicación
     / División
     MOD Módulo (%)

Prioridad 5
     + Suma
     - Resta

Prioridad 6
     << Rotación a la derecha
     >> Rotación a la izquierda

Prioridad 7
     AND AND binario y lógico (&, &&)
     OR OR binario y lógico (|, ||)
     XOR OR exclusivo (^^)

Prioridad 8
     == Comparación
     <> Distinto (!=
     > Mayor
     >= Mayor o igual (=>
     < Menor
     <= Menor o igual (=<

Prioridad 9
     = Asignación
     += Suma-asignación
     -= Resta-asignación
     *= Multiplicación-asignación
     /= División-asignación
     %= Módulo-asignación
     &= AND-asignación
     |= OR-asignación
     ^= XOR-asignación
     >>= Rotación a la derecha-asignación
     <<= Rotación a la izquierda-asignación

Los operadores de prioridad 3 son los operadores conocidos como unarios; éstos no relacionan a dos operandos (que es el caso de los operadores binarios como, por ejemplo, una multiplicación), sino que únicamente afectan al valor de un operador. Dentro de los operadores unarios se ejecutarán primero los más cercanos al operando, por ejemplo en la expresión:

  NOT -x

El operando x tiene dos operadores unarios, la negación de signo - y el NOT lógico y/o binario; de éstos se ejecutará primero la negación de signo, pues es la que está más cerca del operando.

Todos los operadores a partir de la prioridad 4 son binarios y se ejecutarán según su nivel de prioridad por lo que, cuando en una expresión haya más de un operador del mismo nivel (por ejemplo, una multiplicación y una división, que son ambas de prioridad 4), se procesarán de izquierda a derecha, es decir, en la siguiente expresión:

  8/2*2

Se ejecutará primero la división y después la multiplicación (que es la forma natural de evaluar las expresiones en matemáticas).

La única excepción son los operadores de prioridad 9 (operadores de asignación), que serán evaluados de derecha a izquierda (en lugar de izquierda a derecha), es decir, en la expresión:

  x=y=0

Primero, se procesará y=0 (se pondrá y a 0) y, después, x=y (también se pondrá x a 0, ya que y ahora valdrá 0).

Como se puede observar las asignaciones funcionan a modo de operador devolviendo, tras realizar la asignación, el valor que han asignado como resultado de la operación.


Ver: Sintaxis - Definición de una expresión