Autor Tema: Operadores bit a bit en java bitwise operators direncia entre XOR y OR  (Leído 6910 veces)

Refer

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 14
    • Ver Perfil
Hola, buenas noches a todos, Me ha surgido una duda cuando estaba usando operadores logicos.

Resulta que java evalua las condiciones de una decision mientras el operador siga funcionando (o mejor dicho evaluacion en cortocircuito) he notado que al operador
AND logico (&&) le tiene efecto dicha condicion por ejemplo:

Código: [Seleccionar]
int n = 2;

if(n== 5 && ++n == 4)

el control del programa evalua la condicion n == 5 que es igual a falsa, por lo tanto la decision seria falsa al saber que uno de las 2 condiciones no es verdadera, por lo tanto la exprecion ++n de la segunda condicion, no se ejecuta.

La DUDA es cuando uso OR logico

Código: [Seleccionar]
int n = 2;

if(n== 5 || ++n == 4)

La decision termina siendo verdadera, ya que al no ser verdadera la primera condicion, se determina si la segunda condición es verdadera (la cual si es) y ++n se ejecuta, dado que la maquina virtual evalua la exprecion ++n == 4 y luego decide que es falsa.

Entonces ¿Para que usaria el operador OR logico booleano (|) si el efecto es el mismo que || ?

la cosa seria diferente si usara el operador AND logico booleano (&), A ese si le veo mas utilidad.

Gracias a todos, Buenas noches!
« Última modificación: 28 de Noviembre 2015, 16:46 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Operadores bit a bit en java bitwise operators direncia entre XOR y OR
« Respuesta #1 en: 28 de Noviembre 2015, 16:48 »
En este código

Código: [Seleccionar]
int n = 2;
if(n== 5 && ++n == 4) {
System.out.println ("Aqui n vale"+n);
}
System.out.println ("Ahora n vale"+n);

Ocurre lo que tú comentas, al no cumplirse n ser 5 no llega a ejecutarse ni evaluarse ++n == 4

Java incluye algunos operadores que no se suelen utilizar en la programación más habitual que son los operadores bit a bit como el or bit a bit o el and bit a bit

En concreto se definen estos operadores:

~       Unary bitwise complement
<<      Signed left shift
>>      Signed right shift
>>>     Unsigned right shift
&       Bitwise AND
^       Bitwise exclusive OR
|       Bitwise inclusive OR

Estos operadores se recomienda que no sean usados en la programación habitual.

Este código es un ejemplo de estos operadores:

Código: [Seleccionar]
public class Test {

  public static void main(String args[]) {
     int a = 60; /* 60 = 0011 1100 */ 
     int b = 13; /* 13 = 0000 1101 */
     int c = 0;

     c = a & b;       /* 12 = 0000 1100 */
     System.out.println("a & b = " + c );

     c = a | b;       /* 61 = 0011 1101 */
     System.out.println("a | b = " + c );

     c = a ^ b;       /* 49 = 0011 0001 */
     System.out.println("a ^ b = " + c );

     c = ~a;          /*-61 = 1100 0011 */
     System.out.println("~a = " + c );

     c = a << 2;     /* 240 = 1111 0000 */
     System.out.println("a << 2 = " + c );

     c = a >> 2;     /* 215 = 1111 */
     System.out.println("a >> 2  = " + c );

     c = a >>> 2;     /* 215 = 0000 1111 */
     System.out.println("a >>> 2 = " + c );
  }
}

El resultado es:

a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 15
a >>> 15

El operador XOR en java es ^ y devuelve el resultado de comparación bit a bit:

1 XOR 1 = 0 (uno es distinto de 1 es falso)
1 XOR 0 = 1 (Uno es distinto de cero es verdadero)
0 XOR 1 = 1 (cero distinto de 1 es verdadero)
0 XOR 0 = 0 (cero distinto de cero es falso)

El resultado de esta operación:

0011 XOR 0101 = 0110

Se explica con la lógica anterior

El operador or inclusivo | es equivalente al operador || de disyunción habitual, no hay diferencias entre ambos, pero el que debe usarse en programación habitual es ||

Saludos
« Última modificación: 28 de Noviembre 2015, 16:51 por Alex Rodríguez »

Refer

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 14
    • Ver Perfil
Re:Operadores bit a bit en java bitwise operators direncia entre XOR y OR
« Respuesta #2 en: 02 de Diciembre 2015, 03:02 »
Bueno jeje, el problema es que no estoy manejando bits, Estoy usando el operador OR booleano '|'  en decisiones de una estructura de repetición pero no le veo su utilidad
« Última modificación: 04 de Diciembre 2015, 08:36 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Operadores bit a bit en java bitwise operators direncia entre XOR y OR
« Respuesta #3 en: 04 de Diciembre 2015, 08:37 »
Buenas la utilidad de | es específica para operaciones bit a bit, si simplemente quieres usar un OR debes hacerlo con ||

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".