Vous êtes sur la page 1sur 9

OPERADORES A. Operadores aritmticos El lenguaje Java soporta varios operadores aritmticos para los nmeros enteros y en coma flotante.

Se incluye + (suma), - (resta), * (multiplicacin), / (divisin), y% (mdulo, es decir, resto de una divisin entera). Por ejemplo: sumaEste + aEste; //Suma los dos enteros divideEste % entreEste; //Calcula el resto de dividir 2 enteros
Operador + * / % Uso op1 + op2 op1 - op2 op1 * op2 op1 / op2 op1 % op2 Descripcin Suma op1 y op2 Resta op2 de op1 Multiplica op1 por op2 Divide op1 por op2 Calcula el resto de dividir op1 entre op2

Tabla 9: Operadores aritmticos binarios de Java El tipo de los datos devueltos por una operacin aritmtica depende del tipo de sus operandos; si se suman dos enteros, se obtiene un entero como tipo devuelto con el valor de la suma de los dos enteros. Estos operadores se deben utilizar con operandos del mismo tipo, o si no realizar una conversin de tipos de uno de los dos operandos al tipo del otro. El lenguaje Java sobrecarga la definicin del operador + para incluir la concatenacin de cadenas. El siguiente ejemplo utiliza + para concatenar la cadena "Contados ", con el valor de la variable contador y la cadena " caracteres.": System.out.print("Contados" + contador + "caracteres."); Esta operacin automticamente convierte el valor de contador a una cadena de caracteres. Los operadores + y - tienen versiones unarias que realizan las siguientes operaciones:

Operador + -

Uso +op -op

Descripcin Convierte op a entero si es un byte, short o char Niega aritmticamente op

Tabla 10: Versiones unarias de los operadores "+" y "-" El operador - realiza una negacin del nmero en complemento A2, es decir, cambiando de valor todos sus bits y sumando 1 al resultado final:
42 -> 00101010

-42 -> 11010110

Existen dos operadores aritmticos que funcionan como atajo de la combinacin de otros: ++ que incrementa su operando en 1, y -- que decrementa su operando en 1. Ambos operadores tienen una versin prefija, y otra posfija. La utilizacin la correcta es crtica en situaciones donde el valor de la sentencia es utilizado en mitad de un clculo ms complejo, por ejemplo para control de flujos:
Operador ++ ++ --Uso op++ ++op op---op Descripcin Incrementa op en 1; se evala al valor anterior al incremento Incrementa op en 1; se evala al valor posterior al incremento Decrementa op en 1; se evala al valor anterior al incremento Decrementa op en 1; se evala al valor posterior al incremento

Tabla 11: Operaciones con "++" y "--" B. Operadores de comparacin y condicionales Un operador de comparacin compara dos valores y determina la relacin existente entre ambos. Por ejemplo, el operador != devuelve verdadero (true) si los dos operandos son distintos. La siguiente tabla resume los operadores de comparacin de Java:
Operador Uso > op1 > op2 >= op1 >= op2 Devuelve verdadero si op1 es mayor que op2 op1 es mayor o igual que op2

< <= == !=

op1 < op2 op1 <= op2 op1 == op2 op1 != op2

op1 es menor que op2 op1 es menor o igual que op2 op1 y op2 son iguales op1 y op2 son distintos

Tabla 12: Operadores de comparacin Los operadores de comparacin suelen ser usados con los operadores condicionales para construir expresiones complejas que sirvan para la toma de decisiones. Un operador de este tipo es &&, el cual realiza la operacin booleana and. Por ejemplo, se pueden utilizar dos operaciones diferentes de comparacin con &&para determinar si ambas relaciones son ciertas. La siguiente lnea de cdigo utiliza esta tcnica para determinar si la variable index de una matriz se encuentra entre dos lmites (mayor que cero y menor que la constante NUMERO_ENTRADAS): ( 0 < index ) && ( index < NUMERO_ENTRADAS ) Se debe tener en cuenta que en algunos casos, el segundo operando de un operador condicional puede no ser evaluado. En caso de que el primer operando del operador && valga falso, Java no evaluar el operando de la derecha: (contador < NUMERO_ENTRADAS) && ( in.read() != -1 ) Si contador es menor que NUMERO_ENTRADAS, el valor de retorno de && puede ser determinado sin evaluar el operando de la parte derecha. En este casoin.read no ser llamado y un carcter de la entrada estndar no ser ledo. Si el programador quiere que se evale la parte derecha, deber utilizar el operador & en lugar de &&. De la misma manera se relacionan los operadores || y | para la exclusin lgica (OR). Java soporta cinco operadores condicionales, mostrados en la siguiente tabla:
Operador && & || Uso op1 && op2 op1 & op2 op1 || op2 Devuelve verdadero si... op1 y op2 son ambos verdaderos, condicionalmente evala op2 op1 y op2 son ambos verdaderos, siempre evala op1 y op2 op1 o op2 son verdaderos, condicionalmente evala op2

| !

op1 | op2 ! op

op1 o op2 son verdaderos, siempre evala op1 y op2 op es falso

Tabla 13: Operadores condicionales Adems Java soporta un operador ternario, el ?:, que se comporta como una versin reducida de la sentencia if-else: expresion ? operacion1 : operacion2 El operador ?: evala la expresion y devuelve operacin1 si es cierta, o devuelve operacin2 si expresion es falsa. C. Operadores de bit Un operador de bit permite realizar operaciones de bit sobre los datos. Existen dos tipos: los que desplazan (mueven) bits, y operadores lgicos de bit.
a.) Operadores de desplazamiento de bits

Operador >> << >>>

Uso op1 >> op2 op1 << op2 op1 >>> op2

Operacin Desplaza los bits de op1 a la derecha op2 veces Desplaza los bits de op1 a la izquierda op2 veces Desplaza los bits de op1 a la derecha op2 veces (sin signo)

Tabla 14: Operadores de desplazamiento de bits Los tres operadores de desplazamiento simplemente desplazan los bits del operando de la parte izquierda el nmero de veces indicado por el operando de la parte derecha. El desplazamiento ocurre en la direccin indicada por el operador. Por ejemplo, la siguiente sentencia, desplaza los bits del entero 13 a la derecha una posicin: 13 >> 1; La representacin en binario del nmero 13 es 1101. El resultado de la operacin de desplazamiento es 1101 desplazado una posicin a la derecha, 110 o 6 en decimal. Se debe tener en cuenta que el bit ms a la derecha se pierde en este caso. Un desplazamiento a la derecha una posicin es equivalente a dividir el operando del lado izquierdo por 2, mientras que un desplazamiento a la izquierda de una

posicin equivale a multiplicar por 2, pero un desplazamiento es ms eficiente, computacionalmente hablando, que una divisin o multiplicacin. El desplazamiento sin signo >>> funciona de la siguiente manera:

Si se desplaza con signo el nmero -1 (1111), seguir valiendo -1, dado que la extensin de signo sigue introduciendo unos en los bits ms significativos. Con el desplazamiento sin signo se consigue introducir ceros por la izquierda, obteniendo el nmero 7 (0111).

Este tipo de desplazamientos es especialmente til en la utilizacin de mscaras grficas.


b.) Operadores de lgica de bits

La lgica de bits (lgica de Bool) se utiliza para modelizar condiciones biestado y trabajar con ellas (cierto/falso, true/false, 1/0). En Java hay cuatro operadores de lgica de bits:
Operador & | ^ ~ Uso op1 & op2 op1 | op2 op1 ^ op2 ~op2 Operacin AND OR OR Exclusivo Complemento

Tabla 15: Operadores de lgica de bits El operador & realiza la operacin AND de bit. Aplica la funcin AND sobre cada par de bits de igual peso de cada operando. La funcin AND es evaluada a cierto si ambos operandos son ciertos. Por ejemplo vamos a aplicar la operacin AND a los valores 12 y 13: 12 & 13 El resultado de esta operacin es 12. Por qu?. La representacin en binario de 12 es 1100, y de 13 es 1101. La funcin AND pone el bit de resultado a uno si los dos bits de los operandos son 1, sino, el bit de resultado es 0:
1101

& 1100 -----1100

El operador | realiza la operacin OR de bit. Aplica la funcin OR sobre cada par de bits de igual peso de cada operando. La funcin OR es evaluada a cierto si alguno de los operandos es cierto. El operador ^ realiza la operacin OR exclusivo de bit (XOR). Aplica la funcin XOR sobre cada par de bits de igual peso de cada operando. La funcin XOR es evaluada a cierto si los operandos tienen el mismo valor. Para finalizar, el operador de complemento invierte el valor de cada bit del operando. Convierte el falso en cierto, y el cierto en falso: Entre otras cosas, la manipulacin bit es til para gestionar indicadores booleanos (banderas). Supongamos, por ejemplo, que se tiene varios indicadores booleanos en nuestro programa, los cuales muestran el estado de varios componentes del programa: esVisible, esArrastrable, etc... En lugar de definir una variable booleana para cada indicador, se puede definir una nica variable para todos ellos. Cada bit de dicha variable representar el estado vigente de uno de los indicadores. Se debern utilizar entonces manipulaciones de bit para establecer y leer cada indicador. Primero, se deben preparar las constantes de cada indicador. Esos indicadores deben ser diferentes unos de otros (en sus bits) para asegurar que el bit de activacin no se solape con otro indicador. Despus se debe definir la variable de banderas, cuyos bits deben de poder ser configurados segn el estado vigente en cada indicador. El siguiente ejemplo inicia la variable de banderas flags a 0, lo que significa que todos los indicadores estn desactivados (ninguno de los bits es 1): final int VISIBLE = 1; final int ARRASTRABLE = 2; final int SELECCIONABLE = 4;

final int MODIFICABLE = 8; int flags = 0; Para activar el indicador VISIBLE, se deber usar la sentencia: flags = flags | VISIBLE; Para comprobar la visibilidad se deber usar la sentencia:
if ( (flags & VISIBLE) == 1 ) //Lo que haya que hacer

D. Operadores de asignacin El operador de asignacin bsico es el =, que se utiliza para asignar un valor a otro. Por ejemplo: int contador = 0; Inicia la variable contador con un valor 0. Java adems proporciona varios operadores de asignacin que permiten realizar un atajo en la escritura de cdigo. Permiten realizar operaciones aritmticas, lgicas, de bit y de asignacin con un nico operador. Supongamos que necesitamos sumar un nmero a una variable y almacenar el resultado en la misma variable, como a continuacin: i = i + 2; Se puede abreviar esta sentencia con el operador de atajo +=, de la siguiente manera: i += 2; La siguiente tabla muestra los operadores de atajo de asignacin y sus equivalentes largos:
Operador Uso Equivalente a

+= -= *= /= %= &=

op1 += op2 op1 -= op2 op1 *= op2 op1 /= op2 op1 %= op2 op1 &= op2

op1 = op1 + op2 op1 = op1 - op2 op1 = op1 * op2 op1 = op1 / op2 op1 = op1 % op2 op1 = op1 & op2

Tabla 16: Operadores de atajo de asignacin E. Precedencia de operadores Cuando en una sentencia aparecen varios operadores el compilador deber de elegir en qu orden aplica los operadores. A esto se le llama precedencia. Los operadores con mayor precedencia son evaluados antes que los operadores con una precedencia relativa menor. Cuando en una sentencia aparecen operadores con la misma precedencia:

Los operadores de asignacin son evaluados de derecha a izquierda. Los operadores binarios, (menos los de asignacin) son evaluados de izquierda a derecha.

Se puede indicar explcitamente al compilador de Java cmo se desea que se evale la expresin con parntesis balanceados ( ). Para hacer que el cdigo sea ms fcil de leer y mantener, es preferible ser explcito e indicar con parntesis que operadores deben ser evaluados primero. La siguiente tabla muestra la precedencia asignada a los operadores de Java. Los operadores de la tabla estn listados en orden de precedencia: cuanto ms arriba aparezca un operador, mayor es su precedencia. Los operadores en la misma lnea tienen la misma precedencia:
Tipo de operadores Operadores posfijos Operadores unarios Creacin o conversin Multiplicacin Suma Desplazamiento Comparacin Igualdad Operadores de este tipo [ ] . (parametros) expr++ expr-++expr --expr +expr -expr ~ ! new (tipo) expr */% +<< < <= = instanceof == !=

AND a nivel de bit OR a nivel de bit XOR a nivel de bit AND lgico OR lgico Condicional Asignacin

& ^ | && || ?: = += -= *= /= %= &= ^= |= <<= = =

Tabla 17: Precedencia de operadores Por ejemplo, la siguiente expresin produce un resultado diferente dependiendo de si se realiza la suma o divisin en primer lugar: x + y / 100 Si no se indica explcitamente al compilador el orden en que se quiere que se realicen las operaciones, entonces el compilador decide basndose en la precedencia asignada a los operadores. Como el operador de divisin tiene mayor precedencia que el operador de suma el compilador evaluar y/100 primero. As: x + y / 100 Es equivalente a: x + (y / 100)