Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado 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:
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
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!
-
En este código
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:
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
-
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
-
Buenas la utilidad de | es específica para operaciones bit a bit, si simplemente quieres usar un OR debes hacerlo con ||
Salu2