jueves, 28 de marzo de 2013

Operadores y expresiones en Java


EXPRESIONES
Una expresión es un conjunto de variables, constantes y/ó funciones unidas mediante uno o varios operadores. El resultado será un único valor numérico, lógico o una cadena de caracteres. Si las expresiones son muy complejas se suelen encerrar entre paréntesis para distinguir el orden de ejecución de la misma. Lo que está entre paréntesis siempre es lo primero que se ejecuta ya que este operador es el más prioritario de todos.
Ej: x=5*(6+4);
En el ejemplo lo primero que se ejecuta es la suma ya que está entre paréntesis, si no estuviesen los paréntesis se ejecutaría primero el producto puesto que su operador es más prioritario.
En la siguiente tabla se muestra el orden de precedencia de los operadores ordenados de más a menos prioritario:
Máxima prioridad
Expresión
( ) [ ]
Unarios
- ! ++ --
Multiplicativos
* / %
Aditivos
+ -
De movimiento de bits
>> <<
Relacionales
< <= > >= == !=
Lógicos
& ^| && ||
Condicionales
?
Asignación
=
Minima prioridad

En los puntos siguientes los explico con más detalle.

OPERADORES ARITMÉTICOS
Permiten realizar operaciones aritméticas con datos numéricos.
Operador
Descripción
Sintaxis
+
suma
valor1 + valor2
-
resta
valor1 – valor2
*
producto
Valor1 * valor2
/
división
Valor1 / valor2
%
módulo (resto división entera)
Valor1 % valor2
++
incremento
variable++ ó ++variable
--
decremento
Variable -- ó --variable
-
cambio de signo
-valor

Operadores suma, resta, producto, división y módulo
En el siguiente ejemplo se declaran dos números enteros con los que se realizan una serie de operaciones (suma, resta, producto, división y módulo). El resultado de cada operación se almacena en la variable resultado. Cada vez que se almacena un nuevo resultado se pierde el anterior por eso se imprime por pantalla antes:

la salida de este código es:


El resultado de dividir x (5) entre y (2) es 2. Esto se debe a que x e y son números enteros por lo tanto se hace la división entera. No queda exacta, sobraría uno. Se puede obtener ese dato con el modulo (%) que devuelve 1, ya que es lo que sobra de la división. Es el resto.
Si lo que se pretende es que el resultado sea un numero real, hay que usar variables reales para que el operador no realice una división entera:


El resultado será un numero real:



Operadores de incremento y decremento
Estos operadores son unarios o monarios. Esto significa que afectan a una única variable. Se pueden usar tanto delante (prefijo) como detrás (postfijo) de la variable sobre la que se quiere hacer la operación. El resultado será el mismo (incrementar o decrementar):


En la salida se puede ver que la y se ha ido decrementando en una unidad y la x incrementándose también en una unidad:



Hay que tener cuidado si se usan estos operadores en una asignación ya que el resultado cambiará si se usa el operador prefijo o el postfijo:


Salida:


Como se ve en la salida, el operador prefijo, primero modifica x y luego asigna el nuevo valor a y. En el caso del postfijo es al revés. Primero asigna el valor de x a y, luego modifica x. En los dos casos la variable a la que afecta el operador se ve afectada, la diferencia está en la variable a la que se le asigna el valor.

Operador de cambio de signo
El operador de cambio de signo es igual que el operador de resta, pero su funcionamiento es distinto. Al colocar este operador delante de una variable en una asignación hace que el dato guardado sea de signo apuesto al original:


Salida:


OPERADORES RELACIONALES
Permiten comparar dos valores numéricos o caracteres. Devuelven true o false en función de que la comparación sea cierta o falsa.

Operador
Descripción
Sintaxis
>
mayor exclusivo
Valor1 > valor2
<
menor exclusivo
Valor1 < valor2
>=
mayor o igual
Valor1 >= valor2
<=
menor o igual
Valor1 <= valor2
==
igualdad
Valor1 == valor2
!=
desigualdad
Valor1 != valor2

Un ejemplo con cada operador:


La salida de este código es:


NOTA: No hay que confundir el operador de igualdad (==) con el de asignación (=).

OPERADORES LÓGICOS
Permiten unir expresiones lógicas para evaluarlas en conjunto y saber si son true o false.

Operador
Descripción
Sintaxis
&&
conjunción (and)
Expresión && expresión
||
disyunción (or)
Expresión || expresión
!
negación (not)
! expresion

&&
Las dos expresiones deben ser true para que la expresión completa sea true:

&&
true
false
true
true
false
false
false
false




||
Es suficiente que una de las dos expresiones sea true para que la expresión completa lo sea:

||
true
false
true
true
true
false
true
false



!
Niega la expresión. El valor será el contrario:

!
true
false

false
true





OPERADORES DE ASIGNACIÓN
Asignan el valor de la expresión de la derecha en la variable de la izquierda. Siempre se evalúa la parte derecha primero. No es una ecuación.

Operador
Descripción
Sintaxis
Equivalente a
=
asignación
variable=expresión

+=
suma
variable+=expresión
variable=variable+expresión
-=
resta
variable-=expresión
variable=variable-expresión
*=
producto
variable*=expresión
variable=variable*expresión
/=
división
variable/=expresión
variable=variable/expresión
%=
módulo
variable%=expresión
variable=variable%expresión

El resultado de la suma (x+y) se almacena en z:


El primer operador de la tabla es el de asignación, el resto son abreviaciones de expresiones más largas que contienen en la parte derecha la misma variable que se encuentra en la parte izquierda de la asignación:


OPERADOR ?
Sirve para realizar asignaciones condicionales. Es decir, se evaluará una expresión lógica y dependiendo de si es true o false se asignará un valor u otro. La sintaxis es la siguiente:

variable = expresión_logica ? valor_verdadero : valor_falso;

En el siguiente ejemplo se compran dos valores enteros. Si x es mayor que y entonces se guarda en resultado el primer valor (“X es mayor”) que se corresponde con el verdadero, sino se guarda el segundo (“Y es mayor”) que se corresponde con el falso:


El resultado es el siguiente:



OPERADORES A NIVEL DE BITS
Estos operadores trabajan desde el nivel interno de los datos, sus bits (0s y 1s). En computación el 1 representa un valor verdadero y el 0 un valor falso por lo que las operaciones que se realiza con ellos son logicas y funcionan de forma similar a las que se realizan con los operadores && (and) y || (or).

Operador
Descripción
Sintaxis
&
Conjunción de bits (and)
dato1 & dato2
|
Disyunción de bits (or)
dato1 | dato2
^
Disyunción excluyente de bits (xor)
dato1 ^ dato2
<<
Desplazamiento de bits a la izquierda
dato1 << numero_bits
>>
Desplazamiento de bits a la derecha
dato1 >> numero_bits
~
Complemento
~dato

En este post no los explicaré. Si le interesan a alguien puedo hacer un post solo para ellos porque son algo extensos de explicar.


OPERADORES CON OBJETOS
Existen otros operadores que se usan con objetos pero los explicaré más adelante. Son los tres siguientes:

instanceof
Este operador sirve para saber si un objeto es idéntico a una clase. Es muy útil en herencia.

this
Permite identificar la clase a la que pertenece un objeto.

new
El operador new sirve para reservar memoria e instanciar objetos.

No hay comentarios:

Publicar un comentario