Operadores
Los operadores realizan algunas
funciones en uno o dos operandos. Los operadores que requieren un operador se
llaman operadores unarios. Por ejemplo, ++ es un operador unario que incrementa
el valor su operando en uno.
Los operadores que requieren dos
operandos se llaman operadores binarios. El operador = es un operador binario
que asigna un valor del operando derecho al operando izquierdo.
Los operadores unarios en Java pueden
utilizar la notación de prefijo o de sufijo. La notación de prefijo significa
que el operador aparece antes de su operando:
operador operando
La notación de sufijo significa que el
operador aparece después de su operando:
operando operador
Todos los operadores binarios de Java
tienen la misma notación, es decir aparecen entre los dos operandos:
op1 operator op2
Además de realizar una operación
también devuelve un valor. El valor y su tipo dependen del tipo del operador y
del tipo de sus operandos. Por ejemplo, los operadores aritméticos (realizan las
operaciones de aritmética básica como la suma o la resta) devuelven números, el
resultado típico de las operaciones aritméticas. El tipo de datos devuelto por
los operadores aritméticos depende del tipo de sus operandos: si sumas dos
enteros, obtendrás un entero. Se dice que una operación evalúa su resultado.
Es muy útil dividir los operadores
Java en las siguientes categorías: aritméticos, relacionales y condicionales. Lógicos
y de desplazamiento y de asignación.
Operadores Aritméticos
El lenguaje Java soporta varios operadores
aritéticos - incluyendo + (suma), - (resta), * (multiplicación), / (división),
y % (módulo)—en todos los números enteros y de coma flotante. Por ejemplo,
puedes utilizar este código Java para sumar dos números:
sumaEsto + aEsto
O este código para calcular el resto
de una división:
divideEsto % porEsto
Esta tabla sumariza todas las
operaciones aritméticas binarias en Java:
Operador Uso Descripción
+ op1 + op2 Suma op1 y op2
- op1 - op2 Resta op2 de op1
* op1 * op2 Multiplica op1 y op2
/ op1 / op2 Divide op1 por op2
% op1 % op2 Obtiene el resto de dividir op1 por op2
Nota: El lenguaje Java extiende la
definición del operador + para incluir la concatenación de cadenas.
Los operadores + y -
tienen versiones unarias que seleccionan el signo del operando:
Operador
Uso Descripción
+ + op Indica un valor
positivo
- - op Niega el operando
Además, existen dos
operadores de atajos aritméticos, ++ que incrementa en uno su operando, y -- que
decrementa en uno el valor de su operando.
Operador
Uso Descripción
++ op ++ Incrementa
op en 1; evalúa el valor antes de incrementar
++ ++ op Incrementa op en 1;
evalúa el valor después de incrementar
-- op -- Decrementa
op en 1; evalúa el valor antes de decrementar
-- -- op Decrementa op en 1;
evalúa el valor después de decrementar
Operadores
Relacionales y Condicionales
Los valores relacionales comparan dos
valores y determinan la relación entre ellos. Por ejemplo, != devuelve true si
los dos operandos son distintos.
Esta tabla sumariza los operadores
relacionales de Java:
Operador
Uso Devuelve true si
> op1
> op2 op1 es mayor que op2
>= op1
>= op2 op1 es mayor o igual
que op2
< op1 < op2 op1 es menor que op2
<= op1 <= op2 op1
es menor o igual que op2
== op1
== op2 op1 y op2 son iguales
!= op1
!= op2 op1 y op2 son distintos
Frecuentemente los
operadores relacionales se utilizan con otro juego de operadores, los
operadores condicionales, para construir expresiones de decisión más complejas.
Uno de estos operadores es && que realiza la operación Y booleana. Por
ejemplo puedes utilizar dos operadores relacionales diferentes junto con
&& para determinar si ambas relaciones son ciertas. La siguiente línea
de código utiliza esta técnica para determinar si un índice de un array está
entre dos límites- esto es, para determinar si el índice es mayor que 0 o menor
que NUM_ENTRIES (que se ha definido previamente como un valor constante):
0 <
index && index < NUM_ENTRIES
Observa que en algunas
situaciones, el segundo operando de un operador relacional no será evaluado.
Consideremos esta sentencia:
((count
> NUM_ENTRIES) && (System.in.read() != -1))
Si count es menor que
NUM_ENTRIES, la parte izquierda del operando de && evalúa a false. El
operador && sólo devuelve true si los dos operandos son verdaderos. Por
eso, en esta situación se puede determinar el valor de && sin evaluar el
operador de la derecha. En un caso como este, Java no evalúa el operando de la
derecha. Así no se llamará a System.in.read() y no se leerá un carácter de la
entrada estandard.
Aquí tienes tres operadores
condicionales:
Operador Uso Devuelve true si
&& op1
&& op2 op1 y op2 son
verdaderos
|| op1 || op2 uno de los dos es verdadero
! !
op op es falso
El operador & se
puede utilizar como un sinónimo de && si ambos operadores son booleanos.
Similarmente, | es un sinónimo de || si ambos operandos son booleanos.
Operadores de Desplazamiento
Los operadores de desplazamiento permiten
realizar una manipulación de los bits de los datos. Esta tabla sumariza los
operadores lógicos y de desplazamiento disponibles en el lenguaje Java:
Operador
Uso Descripción
>> op1 >> op2 desplaza a la derecha op2 bits de op1
<< op1 << op2 desplaza a la izquierda op2 bits de op1
>>>
op1 >>> op2 desplaza a la derecha op2 bits de
op1(sin signo)
& op1 & op2 bitwise and
| op1 | op2 bitwise or
^ op1 ^ op2 bitwise xor
~ ~ op bitwise complemento
Los tres operadores de
desplazamiento simplemente desplazan los bits del operando de la izquierda el
número de posiciones indicadas por el operador de la derecha. Los desplazamientos
ocurren en la dirección indicada por el propio operador. Por ejemplo:
13 >> 1;
Desplaza los bits del
entero 13 una posición a la derecha. La representación binaria del número 13 es
1101. El resultado de la operación de desplazamiento es 110 o el 6 decimal.
Observe que el bit situado más a la derecha desaparece. Un desplazamiento a la
derecha de un bit es equivalente, pero más eficiente que, dividir el operando
de la izquierda por dos. Un desplazamiento a la izquierda es equivalente a multiplicar
por dos.
Los otros operadores
realizan las funciones lógicas para cada uno de los pares de bits de cada
operando. La función "y" activa el bit resultante si los dos
operandos son 1.
op1
op2 resultado
0 0 0
0 1 0
1 0 0
1 1
1
Supón que quieres
evaluar los valores 12 "and" 13:
12 &
13
El resultado de esta
operación es 12. ¿Por qué? Bien, la representación binaria de 12 es 1100 y la
de 13 es 1101. La función "and" activa los bits resultantes cuando
los bits de los dos operandos son 1, de otra forma el resultado es 0. Entonces
si colocas en línea los dos operandos y realizas la función "and",
puedes ver que los dos bits de mayor peso (los dos bits situados más a la
izquierda de cada número) son 1 así el bit resultante de cada uno es 1. Los dos
bits de menor peso se evalúan a 0 porque al menos uno de los dos operandos es
0:
1101
& 1100
------
1100
El operador | realiza
la operación O inclusiva y el operador ^ realiza la operación O exclusiva. O
inclusiva significa que si uno de los dos operandos es 1 el resultado es 1.
op1
op2 resultado
0 0 0
0 1 1
1 0 1
1 1 1
O exclusiva significa
que si los dos operandos son diferentes el resultado es 1, de otra forma el
resultado es 0:
op1
op2 resultado
0 0 0
0 1 1
1 0 1
1 1 0
Y finalmente el
operador complemento invierte el valor de cada uno de los bites del operando:
si el bit del operando es 1 el resultado es 0 y si el bit del operando es 0 el
resultado es 1.
Operadores de Asignación
Puedes utilizar el operador de
asignación =, para asignar un valor a otro.
Además del operador de asignación básico,
Java proporciona varios operadores de asignación que permiten realizar
operaciones aritméticas, lógicas o de bits y una operación de asignación al
mismo tiempo.
Específicamente, supón que quieres añadir
un número a una variable y asignar el resultado dentro de la misma variable,
como esto:
i
= i + 2;
Puedes ordenar esta sentencia
utilizando el operador +=.
i
+= 2;
Las dos líneas de código anteriores
son equivalentes.
Esta tabla lista los operadores de
asignación y sus equivalentes:
Operador Uso Equivale
a
+=
op1 += op2 op1
= op1 + op2
-=
op1 -= op2 op1
= op1 - op2
*=
op1 *= op2 op1
= op1 * op2
/=
op1 /= op2 op1
= op1 / op2
%=
op1 %= op2 op1 = op1 % op2
&=
op1 &= op2 op1 = op1 & op2
|=
op1 |= op2 op1 = op1 | op2
^=
op1 ^= op2 op1 = op1 ^ op2
<<=
op1 <<= op2 op1 = op1 << op2
>>=
op1 >>= op2 op1 = op1 >> op2
>>>= op1 >>>= op2 op1 = op1 >>> op2
No hay comentarios:
Publicar un comentario