Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Refer en 26 de Noviembre 2015, 02:15

Título: Operadores bit a bit en java bitwise operators direncia entre XOR y OR
Publicado por: Refer en 26 de Noviembre 2015, 02:15
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!
Título: Re:Operadores bit a bit en java bitwise operators direncia entre XOR y OR
Publicado por: Alex Rodríguez 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
Título: Re:Operadores bit a bit en java bitwise operators direncia entre XOR y OR
Publicado por: Refer 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
Título: Re:Operadores bit a bit en java bitwise operators direncia entre XOR y OR
Publicado por: Ogramar 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