- Conceptos básicos
- Operaciones de asignación
- Operaciones aritméticas
- Incremento y decremento
- Operaciones de comparación
- Operaciones lógicas
- Operaciones a nivel de bits
- Operaciones de modificación
- Operador ternario condicional
- Coma
- Operadores especiales sizeof y typename
- Agrupación con paréntesis
- Prioridades de las operaciones
Incremento y decremento
Los operadores de incremento y decremento permiten escribir de forma simplificada el aumento o disminución en 1 de un operando. Estos aparecen la mayor parte de las veces dentro de bucles para modificar los índices al acceder a arrays u otros objetos que admitan la enumeración.
El incremento se indica mediante dos signos + consecutivos: '++'. La disminución se denota por dos signos menos consecutivos: '--'.
Existen dos tipos de operadores como estos: prefijo y postfijo.
Los operadores prefijos, como su nombre indica, se escriben delante del operando (++x, --x). Cambian el valor del operando, y este nuevo valor interviene en los cálculos posteriores de la expresión.
Los operadores postfijos se escriben detrás del operando (x++, x--). Sustituyen la copia del valor del operando actual en la expresión y luego cambian su valor (el nuevo valor no entra en la expresión). Encontrará ejemplos sencillos en el script ExprIncDec.mq5.
int i = 0, j;
|
La forma postfija puede ser útil para una escritura más compacta de expresiones que combinan una referencia al valor precedente del operando y su modificación lateral (se necesitarían dos sentencias distintas para hacer un registro alternativo del mismo). En todos los demás casos se recomienda utilizar la forma de prefijo (no crea una copia temporal del valor «antiguo»).
En el siguiente ejemplo se invierte el signo en los elementos del array de forma consecutiva hasta que se encuentra el elemento de posición cero. El desplazamiento por los índices del array se garantiza mediante el post-incremento k++ dentro del bucle while. Debido al postfijo, la expresión a[k++] = -a[k] actualiza primero el k-ésimo elemento y luego incrementa k en 1. A continuación, se comprueba que el resultado de la asignación no sea igual a cero (!= 0, véase la sección siguiente).
int k = 0;
|
En la siguiente tabla se muestran los operadores de incremento y decremento por orden de prioridad:
P |
Símbolos |
Descripción |
Ejemplo |
Orden de ejecución |
---|---|---|---|---|
1 |
++ |
Post-incremento |
e1++ |
I-D |
1 |
-- |
Post-decremento |
e1-- |
I-D |
2 |
++ |
Incremento prefijo |
++e1 |
D-I |
2 |
-- |
Decremento prefijo |
--e1 |
D-I |
Todas las operaciones de incremento y decremento tienen una prioridad superior a las operaciones aritméticas. Los prefijos tienen menos prioridad que los postfijos. En el siguiente ejemplo, el valor «antiguo» de x se suma con el valor de y, a partir del cual se incrementa x. Si la prioridad del prefijo fuera mayor se realizaría el incremento de y, al que el nuevo valor, 6, se añadiría a x, y obtendríamos z = 6, x = 0 (anterior).
int x = 0, y = 5;
|