¿Que es un operador?


Un operador no es nada más y nada menos que un símbolo con una función predefinida. Y que se puede utilizar en cualquier constante, variable, números, bucles…

Números enteros y reales

Antes de hablar de los tipos de operadores en Java, vamos a explicar un concepto totalmente necesario para poder trabajar con algunos números enteros y los reales. Es necesario conocer sus diferencias debido, a que muchas algunas de las operaciones aritméticas en números binarios como por ejemplo la división o el resto en algunos casos se verán afectadas. Y por lo tanto, sí o sí debemos entender bien este concepto.

Antes de nada, el símbolo ∞ representa el infinito (que no acaba nunca). Por lo tanto, con un menos delante representará el menos infinito (-∞) y con un más delante el más infinito (+∞).

Ejemplo:

-∞=[-1, -2, -3, -4 …-∞]

∞ = [1, 2, 3, 4…∞]



Los números por el momento, los clasificaremos en dos grupos:

  • Los enteros «Z»: están formado por los conjuntos de números naturales «N» y enteros «Z».
    • Números Naturales, se representan con el símbolo «N»: Incluye todos los números mayores a 0 (en algunos casos se incluye el 0 y en otros no). Ejemplo: N = [0, 1, 2, 3, … +∞] o N = [1, 2, 3, … +∞].
    • Números Enteros, se representan con el símbolo «Z»: Incluye todos los números «N», el 0 y todos los negativos. Ejemplo: Z=[-∞…-2, -1, 0, +1, +2…+∞].
  • Los reales «R»: están formados por los conjuntos numéricos anteriormente explicados, naturales «N», enteros «Z», y además también abarcan los conjuntos numéricos de fraccionarios «Q» y irreales «I».
    • Números Racionales, se representan con el símbolo «Q»: Incluye todos los números que pueden expresarse como una fracción de dos números enteros. Por ejemplo: «Q» = [-¼, ¾…].  1/1=1 y -1/1=-1 Por lo tanto los números racionales incluyen dentro de ellos a los naturales «N» ya que 1/1 = 1 y los enteros «Z» ya que -1/1 = -1.
    • Números Irreales«I»: Incluye todos los números que no se pueden escribir en forma de fracción es decir, los que tienen decimales que no siguen un orden lógico. Por ejemplo, la letra PI = 3,1415, las raíces cuadradas de números primos…
    • Números Reales «R»: Incluye los conjuntos numéricos «N», «Z», «Q» además de los «I».

División entre 0 Error Java

Un concepto muy importante es que no podemos dividir nada entre 0. Por ejemplo el calculo de 10/0 si lo realizamos con una calculadora nos dará error. Si nos paramos a pensar es muy sencillo si tenemos 10 manzanas no podemos repartirlas entre a ninguna persona (0) como mínimo necesitaremos una persona (1). Por ejemplo: 10/1= 10 o dos 10/2 = 5…

Un ejemplo para comprobar esto es hacer un System.out.println(1/0);

La única persona que puede dividir entre 0 es Chuck Norris y mejor no tentar a la suerte nuestro amigo Chuck, no se anda con tonterías, bromas aparte, no es posible.

Jerarquía de las operaciones:

Todo en la vida, hasta nosotros y como no, la programación incluida tiene sus prioridades a la hora de ejecutar operaciones. Estás prioridades son conocidas en el mundo matemático como jerarquía de las operaciones. Y meto otra vez las matemáticas en nuestro camino debido a que la jerarquía de operaciones establece las mismas prioridades tanto en matemáticas como en programación.

Os adjunto una pirámide con la jerarquía de operaciones ordenadas.

Tipos de operadores en Java:

En Java, existen varios tipos de operadores, que se clasifican en:

  • Operadores aritméticos: nos permiten manipular datos numéricos tanto enteros como reales y se subdividen en dos tipos dependiendo de la cantidad de números a los que afecta un símbolo.
    • Unarios: Afectan a un solo número. Por lo tanto, solo sirven para definir el símbolo, por ejemplo, si una variable es positiva o negativa. Eso sí, en el caso que especificar un símbolo a un operador unario, el número por defecto será positivo.
Símbolo: Operación: Ejemplo:
+ Signo positivo a = +3;
a = 3;
Signo negativo b = -3;

Ejemplos:OperadoresAritméticosUnarios

Quedando por tanto al compilar, de la siguiente manera:

    • Binarios: necesitan dos o más números. Nos permiten realizar operaciones básicas entre dos o mas números. Los operadores básicos:
Símbolo: Operación: Ejemplo:
+ Suma int a = 3 + 2;
Resta byte b = (5 – 2);
* Multiplicación short c = 5 * 5;
/ División float d = (5f/3f);
% Resto int e = 10 % 7;
+= Acumulador int f= 3;
f +=5;
-= Restador int s= 3;
s -=5;
*= Multiplicador int g= 3;
g *=5;
/= Divisor double h= 3;
h *=5;
%= Modulador double j = 10;
j %= 3;
++ Incremento (+1) int p = 0;
p++;
Decremento (-1) int t = 0;
t–;

Sin ser operadores aritméticos pero muy relacionados con ellos se encuentran:

Operador: Operación: Ejemplo:
y+2 Incremento (+2) sobre la variable y int y = 0;

y=y+2;

w-2 Decremento (-2) sobre la variable w int w = 0;

w=w-2;


Ejemplos:OperadoresAritméticosBinarios

Quedando por tanto al compilar, de la siguiente manera:

Tipos de datos enteros y reales en divisiones (/) y  resto (%) en Java

Todos los operadores aritméticos binarios admiten expresiones enteras y reales a excepción de la división y el resto. Una de las peculiaridades de los tipos de datos enteros, era que sólo admitirá expresiones enteras (cosa bastante obvia por tanto que no pueden tener decimales), por lo que el resultado a devolver también serán expresiones enteras. Unas expresiones que pueden afectar en gran medida, según para la vayamos a utilizar el dato que hemos almacenado. Por ejemplo, no es lo mismo que un dato nos retorne 0 que 0,33 por ejemplo.

En el caso de los otros operadores, si los 2 números a los que afecta son enteros, la expresión resultante será entera, pero si alguno o ambos son reales, la expresión resultado es de tipo real. En esto tenemos de nuevo otra excepción: el operador /devuelve siempre expresiones de tipo real.

Por ejemplo en el tipo de datos float si escribimos: float a = 1f/2f; 



No hará falta especificar 1.0/2 o 1/2.0 o 1.0/2.0 ya que le estamos diciendo con la f que es es número que pertenece al tipo de datos de los reales.

Muestra de todo ello es el siguiente ejemplo:

Ejemplos:ResultadosDivisionesYReales

Quedando por tanto al compilar, de la siguiente manera:

  • Operadores relacionales:
Operador Ejemplo Descripción

==

A == B;

5 == 3;

A Igual que B

!=

A != C;

2 != 1;

A Diferente que C

A< B;

5 < 10;

A Menor que B

D > 5; D Mayor que 5

<=

E <= 6; E Menor o igual que 6

>=

f >= 7; Mayor o igual que

Ejemplos:OperadoresRelacionales

Quedando por tanto al compilar, de la siguiente manera:

  • Operadores lógicos:
Operador: Descripción: Ejemplo:
&&

Y (and)

Si ambas condiciones se cumplen.

Si A se cumple && (y) B también. Se debe comparar más de una condición.

boolean=true;

boolean y = false;

boolean comparacion1ap1 = x && x;

|| 

O (or)

Si A se cumple ||(o) B se cumple (o ambas). Pero con que se cumple una nos valdría. Se debe comparar más de una condición.

 boolean x = false;                      boolean y = true;

boolean resultado = ((x==true) || (y==false));

!

NO o DIFERENTE (not)

X no es igual a…

 boolean x = false;                       boolean y = true;

boolean resultado = ((!x==true));

Ejemplos:OperadoresLógicos

Operador && (Y o AND)

Quedando por tanto al compilar, de la siguiente manera:

 Operador || (O o OR)

Quedando por tanto al compilar, de la siguiente manera:

Operador Lógico ! (NO o NOT)

Quedando por tanto al compilar, de la siguiente manera:

  • Operadores lógicos de bit: estos ya son los últimos, no os asustéis, pero eso sí, son los que más conocimiento requieren. Por ello, empezamos con un poco de teoría, pero es solo una introducción ya que si queremos trabajar con ellos debemos desarrollar mucho más estos conceptos (vamos allá).

¿Qué es el bitwise?

Las operaciones lógicas de bit, se les conoce tal cual (operaciones lógicas de bit) o también con el nombre de bitwise. El termino Bitwise, engloba todo el trabajo con la  unidad mínima informática, el bit. Haciendo repaso de las lecciones anteriores, un bit tiene dos valores únicos posibles: 0 o 1. Aunque la gran mayoría de operaciones computacionales trabajan con unidades superiores (más grandes) que el bit.  Un claro ejemplo de una unidad superior al bit es el “hermano mayor” el byte. Un byte está formado 8 bits, por lo tanto un byte es un bloque de 8 bits.

Una de las peculiaridades del bitwise es que solo se puede utilizar sobre número enteros (int, byte, short y long).

Operador Operación
| OR BINARIO (operación bit a bit)
& AND BINARIO (operación bit a bit)
 ^ XOR (Operación bit a bit)
>>  Desplazamiento hacia la derecha (operación de desplazamiento)
>>>  Desplazamiento hacia la derecha incluyendo el bit de signo (operación de desplazamiento)
<< Desplazamiento hacia la izquierda (operación de desplazamiento)
~ NO o NOT cambia todos los valores de 1 a 0 y los de 0 a 1 (Operador de Rotación).

Tipos de operaciones de bits (bitwise):

Podemos trabajar con los bits de diversas maneras. Existen 3 categorías en las que podemos subdividir las operaciones de bitwise:

  1. Operaciones bit a bit: Trabajan con operaciones lógicas & (and) , (or), ^ XOR…
  2. Operaciones de Desplazamiento: Desplazan los bits de los operandos hacia una dirección (derecha u izquierda) << , >>> y >>.
  3. Operaciones de Rotación: Rotan los bits hacia la dirección que le especifiquemos (derecha o izquierda) ~ .



¿Qué es el desplazamiento de bits?

El desplazamiento de bits, es la operación que mueve o desplaza los bits que forman un número hacía una dirección (pudiendo ser esta, hacia la izquierda o bien hacia la derecha).

Ejemplo de desplazamiento de bits hacia la izquierda.

Ejemplo de desplazamiento de bits hacia la derecha.

Una de las peculiaridades del tipo de dato los datos integer (int) es el tamaño 32 bits. Si nos acordamos podemos sacar total en bits de un tipo de dato int, con System.out.println(Integer.SIZE); El resultado será 32 (bits claro) y una vez tenemos el resultado hay que recordar que el primer bit define el símbolo.
Ejemplos:DesplazamientoBits

Bien, hemos explicado los fundamentos del desplazamiento de bits. Ahora, vamos a continuar con los operadores de bit & y | . Me veo en la obligación de introducir algo más de teoría para que podáis asimilar bien ambos conceptos.

& (AND o Y) en Bitwise

Empezamos con el operado & para bits, si nos fijamos en la imagen inferior, podemos apreciar que, solo hay una combinación que nos de 1 y dicha combinación es 1 & 1 –> 1. El resto tienen como resultado 0. Esto se produce debido a que el resultado necesita que ambos bits estén activos en ambos números. También hay que matizar que es importante no confundir el & (bitwise) con && (Operador lógico). Por lo tanto, con & tenemos 3 opciones (de cuatro) que nos darán 0 y tan solo una que son dará 1.

Si aplicamos la tabla a la operación 1001&1100, el resultado como podéis comprobar es 8. Debido a que el 4 bit (empezando de derecha a izquierda), es el único que en ambos números está encendido.

Ejemplos:&(ANDY)ENBITWISE

& (AND Y) EN BITWISE
Quedando por tanto al compilar, de la siguiente manera:

| (O o OR) en Bitwise

El operador O o OR en Bitwise, es representado en Java por |. Si nos fijamos, con | podemos comprobar que hemos revertido la situación del &. Y tenemos 3 opciones (de cuatro) que nos darán 1 y tan solo una que son dará 0.

Como en el operador anterior, vamos a ver otro ejemplo:

Ejemplos:OrOEnBitwise

| (OR O) EN BITWISE

Quedando por tanto al compilar, de la siguiente manera:

^ (XOR) en Bitwise

El operador XOR en Bitwise, es representado en Java por ^. Si nos fijamos, con ^ podemos comprobar que tenemos 2 opciones (de cuatro) que nos darán 1 (las que son diferentes 1 0 o 0 1) y otras dos iguales (1 1 o 0 0) que son darán 0.

Como en el operador anterior, vamos a ver otro ejemplo:

Ejemplos:XOREnBitwise

^ (XOR) EN BITWISE

Quedando por tanto al compilar, de la siguiente manera:

~ (NOT) en Bitwise

Ejemplos:NotEnBitwise

~ (NOT) en Bitwise

Quedando por tanto al compilar, de la siguiente manera: