- 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
Operaciones de modificación
La modificación, que también se denomina asignación compuesta, permite combinar dentro de un operador operaciones aritméticas o a nivel de bits con operaciones de asignación normales.
P |
Símbolos |
Descripción |
Ejemplo |
Orden de ejecución |
|---|---|---|---|---|
14 |
+= |
Suma con asignación |
e1 += e2 |
D-I |
14 |
-= |
Resta con asignación |
e1 -= e2 |
D-I |
14 |
*= |
Multiplicación con asignación |
e1 *= e2 |
D-I |
14 |
/= |
División con asignación |
e1 /= e2 |
D-I |
14 |
%= |
Módulo de división con asignación |
e1 %= e2 |
D-I |
14 |
<<= |
Desplazamiento a la izquierda con asignación |
e1 <<= e2 |
D-I |
14 |
>>= |
Desplazamiento a la derecha con asignación |
e1 >>= e2 |
D-I |
14 |
&= |
AND a nivel de bits con asignación |
e1 &= e2 |
D-I |
14 |
|= |
OR a nivel de bits con asignación |
e1 |= e2 |
D-I |
14 |
^= |
AND/OR a nivel de bits con asignación |
e1 ^= e2 |
D-I |
Estos operadores ejecutan la acción pertinente para los operandos e1 y e2, tras lo cual el resultado se almacena en e1.
Una expresión como e1 @= e2, donde @ es cualquier operador de la tabla, es equivalente aproximadamente a e1 = e1 @ e2. La palabra «aproximadamente» subraya la presencia de algunos aspectos sutiles.
En primer lugar, si el lugar de e2 está ocupado por una expresión con un operador de prioridad inferior a la de @, e2 sigue calculándose antes que ella. Es decir, si la prioridad está marcada con paréntesis, obtendremos e1 = e1 @ (e2).
En segundo lugar, si hay modificaciones laterales de variables en la expresión e1, sólo se realizan una vez. El siguiente ejemplo se ofrece la demostración.
int a[] = {1, 2, 3, 4, 5};
|
En este caso, los arrays a y b contienen elementos idénticos y se procesan mediante las variables de índice i y j. Al mismo tiempo, la expresión para el array a utiliza la operación '*=', mientras que la del array b utiliza la equivalente. Los resultados no son iguales: tanto las variables de índice como los arrays difieren.
Otros operadores serán útiles en problemas con manipulaciones a nivel de bits. Así, la siguiente expresión se puede utilizar para establecer un bit específico en 1:
ushort x = 0;
|
Aquí, el desplazamiento 1 ('0000 0000 0000 0001') se realiza 10 bits a la izquierda, con lo que se obtiene un número con un 10º bit ajustado ('0000 0100 0000 0000'). La operación OR a nivel de bits copia este bit en la variable x.
Para reiniciar el mismo bit, escribiremos:
x &= ~(1 << 10); |
Aquí, la operación de inversión se aplica a 1 desplazado 10 bits a la izquierda (que ya vimos en la expresión anterior), lo que hace que todos los bits cambien de valor: '1111 1011 1111 1111'. La operación AND a nivel de bit restablece los bits a cero (en este caso, uno) en la variable x, mientras que el resto de bits de x permanecen inalterados.