+
,
-
,
*
etc.); de hecho, los operadores de un lenguaje de alto nivel se utilizan formando expresiones. Una expresión, en un lenguaje de alto nivel, es muy parecida a una expresión matemática:
float largo = 2.0; float ancho = 3.0; float superficie; superficie = largo * ancho; /* Aquí hay dos expresiones */
*
) eran las variables
largo
y
ancho
. Por otra parte, el resultado de la expresión
largo*ancho
servía como operando para el operador de asignación (
=
).
+
para que, al darle como operandos dos matrices adecuadas, produzca como resultado la matriz suma de ambas.
-
) y los operadores de incremento y decremento (
++
y
--
). Los operadores binarios, que son los más comunes, se caracterizan por admitir dos operandos, y entre ellos se cuentan los operadores aritméticos habituales (
+
,
-
,
*
,
/
). El uso de operadores puede asemejarse a las llamadas a funciones; se ve entonces la posibilidad de que existan operadores ternarios, cuaternarios etc. dependiendo del número de argumentos que admita la función. Este hecho resulta de especial interés en C++.Nombre | Símbolo |
---|---|
Multiplicación | * |
División | / |
Módulo | % |
Suma | + |
Resta | - |
Nombre | Símbolo |
---|---|
Conjunción lógica (AND) |
&& |
Disyunción lógica (OR) |
|| |
Negación lógica (NOT) | ! |
x>7
), se emplean operadores
lógicos
. Estos operadores no consideran la estructura de bits, limitándose a tomar el valor 0 como falso y cualquier otro como verdadero. Existe también otra versión (los operadores de bits) que imponen las operaciones lógicas a los bits empleados para representar internamente a los operandos. Se trata de los operadores
&
,
|
y
~
, respectivamente. Nombre | Símbolo |
---|---|
menor | < |
menor o igual | <= |
mayor | > |
mayor o igual | >= |
distinto | != |
igual | == |
strcmp()
. Véase
aquí
una descripción de las funciones de comparación de cadenas que ofrece C. Téngase en cuenta también que estas funciones no tratan correctamente los signos diacríticos; será preciso recurrir a otros métodos para comparar correctamente cadenas en idiomas que los contengan. Nombre | Símbolo |
---|---|
Conjunción (AND) |
& |
Disyunción (OR) |
| |
Negación o complemento a unos (NOT) | ~ |
Desplazamiento a la izquierda (Multiplicación por 2) |
<< |
Desplazamiento a la derecha (División por 2) |
>> |
AND
,
OR
,
NOT
, etc.) a las representaciones internas de sus operandos. Esto hace posible crear máscaras adecuadas para extraer información relativa a fragmentos concretos de la representación interna de esos operandos. Por otra parte, existen métodos sumamente rápidos para realizar operaciones de multiplicación o división por dos. Si todos los bits de un número escrito en binario se desplazan hacia la izquierda una posición, el resultado equivale a multiplicar por 2; si el desplazamiento es de una posición a la derecha, esto equivale a dividir por 2. Los operadores de desplazamiento permiten realizar, precisamente, este tipo de operaciones.
destino operador_de_asignación expresión
destino
especifica la zona de memoria que recibirá el valor y
expresión
es cualquier expresión válida en el lenguaje considerado. El mecanismo de funcionamiento de las sentencias de asignación tiene tres paso:
rvalue
).
lvalue
).
=
"). Su confusión suele ser indetectable por parte del compilador, y dará lugar a resultados inexplicables e incorrectos. ¡No los confunda! a + bEn este caso, la sintaxis del operador exige escribir primero un operando, después el símbolo del operador, y por último el segundo operando. Evidentemente, esta expresión produciría un resultado, pero ese resultado se perdería al no haber sido asignado a una variable. Consiguientemente, es frecuente encontrar expresiones de la forma
c = a + ben que aparecen dos operadores: el de asignación ("=") y el de adición ("+"). Evidentemente, se pueden crear expresiones mucho más complejas, en las que aparecerá un elevado número de operandos y operadores; de hecho lo normal es que se utilice el resultado de ciertas expresiones como operando para otras. Considérese por ejemplo
d = (a + b) / cEsta expresión contiene una subexpresión,
(a + b)
, que será preciso evaluar antes de efectuar la división, para por último realizar la asignación. Se observa que el orden de evaluación de expresiones es totalmente crucial para obtener un resultado correcto. Será preciso entonces indicar al compilador lo que debe hacer. Considérese la expresión
d = a + b / cEl compilador va a interpretarla en la forma
d = a + (b/c)
, que probablemente no sea lo que deseaba el usuario. Sin embargo, la expresión anterior,
d= (a + b) / c
, se evaluará correctamente, porque el compilador entiende que las expresiones encerradas entre paréntesis tienen prioridad con respecto a las que no están encerradas entre paréntesis (deben evaluarse antes). Cuando dos expresiones están igualmente rodeadas por paréntesis, como en el caso
d = (a + b) / (c + f)
el compilador efectúa la evaluación de izquierda a derecha.Operadores | Comentarios |
---|---|
() [] -> .
|
Las expresiones más anidadas construidas con estos operadores son las de mayor prioridad. |
! ~ ++ -- - (tipo) * & sizeof ,
|
Todos estos operadores son unarios. |
* / %
|
Multiplicación, división y módulo. |
+ -
|
Suma y resta. |
<< >>
|
Operadores de desplazamiento de bits. |
< <= > >=
|
Operadores de comparación numérica. |
== !=
|
Operadores de comparación de igualdad y desigualdad. |
&
|
Conjunción lógica bit a bit (AND). |
^
|
Disyunción lógica excluyente bit a bit (XOR). |
|
|
Disyunción lógica bit a bit (OR). |
&&
|
Conjunción lógica. |
||
|
Disyunción lógica. |
?:
|
Operador condicional. |
= *= /= %= += -= <<= >>= &= ^= |=
|
Operadores de asignación; son los de menor prioridad,para asegurar que la expresión esté completamente evaluada antes de almacenar su resultado. |