Autor
|
Tema: Alguien me podría explicar por qué sucede esto :S (Leído 4,570 veces)
|
*-.Sub-Vorbio.-*
Desconectado
Mensajes: 80
"Dos perros pueden matar a un león".
|
El código es el siguiente. La duda viene relacionada con el operador "^" en Java. public class Operador {
public static void main (String []args){ int a,b; boolean t; a = 3; b = 8;
t = a <= b ^ b > a; System.out.println("t:" + t); } } Lo cual al ejecutar me imprime FALSE... (t: false) No entiendo por qué sucede esto, ya que en el caso de “t“, “a“ debería ser menor o igual (<=) que “b“ (lo cual cumple) o (del tipo XOR a nivel de bit) “b“ debería ser mayor que “a“ (lo cual también cumple). No llego a entender este operador "^", alguien me lo podría explicar?. Gracias. Un saludo y disculpen las molestias.
|
|
« Última modificación: 9 Noviembre 2008, 01:43 am por subVorbio<<||@ »
|
En línea
|
"Al clavo salido le toca siempre el martillazo."
"Cuando los elefantes luchan, la hierba es la que sufre."
|
|
|
Dem0ny
Desconectado
Mensajes: 233
ReseacheR
|
Ostras, antes entendi mal lo que me decias y puse una cosa que no venia a cuento, aver prueba con esto, que ahoramismo yo no puedo probar el codigo. public class Operador { public static void main (String []args ){ int a,b; boolean t; a = 3; b = 8; t = (a <= b) || (b > a); } }
El "o" logico se representa mediante el operador ||, el "Y" mediante &&, etc Saludos, pruebalo y dime Edit! tEstED! Right! C:\>javac Prueba2.java
C:\>java Prueba2 t:true
C:\>
|
|
« Última modificación: 9 Noviembre 2008, 15:06 pm por ~AbbadoN~ »
|
En línea
|
|
|
|
*-.Sub-Vorbio.-*
Desconectado
Mensajes: 80
"Dos perros pueden matar a un león".
|
Pero el operador "^", que utilidad tiene, existinedo el "||" :s no lo entiendo... Por lo que leo por algunos sitios no llego a comprenderlo... Lo siguiente ha sido extraído de: "http://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto/II_3.htm"b.) Operadores de lógica de bits
La lógica de bits (lógica de Bool) se utiliza para modelizar condiciones biestado y trabajar con ellas (cierto/falso, true/false, 1/0).
En Java hay cuatro operadores de lógica de bits:
Operador Uso Operación
& op1 & op2 AND
| op1 | op2 OR
^ op1 ^ op2 OR Exclusivo
~ ~op2 Complemento
Tabla 15: Operadores de lógica de bits
El operador & realiza la operación AND de bit. Aplica la función AND sobre cada par de bits de igual peso de cada operando. La función AND es evaluada a cierto si ambos operandos son ciertos.
Por ejemplo vamos a aplicar la operación AND a los valores 12 y 13:
12 & 13
El resultado de esta operación es 12. ¿Por qué?. La representación en binario de 12 es 1100, y de 13 es 1101. La función 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 operación OR de bit. Aplica la función OR sobre cada par de bits de igual peso de cada operando. La función OR es evaluada a cierto si alguno de los operandos es cierto.
El operador ^ realiza la operación OR exclusivo de bit (XOR). Aplica la función XOR sobre cada par de bits de igual peso de cada operando. La función 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 manipulación 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 deberán 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 activación no se solape con otro indicador. Después se debe definir la variable de banderas, cuyos bits deben de poder ser configurados según el estado vigente en cada indicador.
El siguiente ejemplo inicia la variable de banderas flags a 0, lo que significa que todos los indicadores están 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
|
|
|
En línea
|
"Al clavo salido le toca siempre el martillazo."
"Cuando los elefantes luchan, la hierba es la que sufre."
|
|
|
juancho77
Desconectado
Mensajes: 455
rie con demencia
|
No se bien a que te refieres, pero alli no estas trabajando con bits. Los operadores relacionales en Java que deberias usar son &(&) o |(|).
|
|
|
En línea
|
|
|
|
*-.Sub-Vorbio.-*
Desconectado
Mensajes: 80
"Dos perros pueden matar a un león".
|
No me he sabido explicar bien. Todo sale de este ejercicio: Cree una clase denominada Ejercicio. Dentro de ella cree un método main y dentro de él teclee lo siguiente: int a,b; boolean r,s,t; a = 3; b = 8; r = a == 0 | b >= a; s = a != 0 & b < a; t = a <= b ^ b > a; System.out.println(“r:” + r); System.out.println(“s:” + s); System.out.println(“t:” + t); ¿Cuál es el resultado del código anterior? ¿Por qué? Al poner el código: public class Ejercicio26 {
public static void main (String []args){ int a,b; boolean r,s,t; a = 3; b = 8; r = a == 0 | b >= a; s = a != 0 & b < a; t = a <= b ^ b > a; System.out.println("r:" + r); System.out.println("s:" + s); System.out.println("t:" + t); } }
Se imprime: y el último false no se explicarme por qué sucede.. :S
|
|
|
En línea
|
"Al clavo salido le toca siempre el martillazo."
"Cuando los elefantes luchan, la hierba es la que sufre."
|
|
|
~~
|
Funciona bien: public static void main (String[] args ) { int a,b; boolean r,s,t; a = 3; b = 8; r = (a == 0) || (b >= a); // false OR true = TRUE s = (a != 0) && (b < a); // true AND false = FALSE t = (a <= b) ^ (b > a); // true XOR true = FALSE }
Puedes mirar las tablas de verdad de las operaciones lógicas aquí: http://es.wikipedia.org/wiki/Compuerta_l%C3%B3gicaY cuidado con la prioridad de operandos, si dudas usa paréntesis Salu2
|
|
|
En línea
|
|
|
|
*-.Sub-Vorbio.-*
Desconectado
Mensajes: 80
"Dos perros pueden matar a un león".
|
Se agradece EON, ya lo entendí, al menos el requisito de imparidad. Estaba ofuscado en interpretarlo como un OR. Un saludo.
|
|
|
En línea
|
"Al clavo salido le toca siempre el martillazo."
"Cuando los elefantes luchan, la hierba es la que sufre."
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Alguien me podria explicar el acumulador en c++?
Programación C/C++
|
kesox
|
2
|
8,348
|
5 Diciembre 2010, 04:24 am
por leogtz
|
|
|
alguien me podria explicar este codigo...
Desarrollo Web
|
Paul Young
|
4
|
3,778
|
8 Septiembre 2012, 15:14 pm
por #!drvy
|
|
|
4=3 alguien me puede explicar esto?
« 1 2 3 4 5 »
Foro Libre
|
daryo
|
48
|
19,832
|
9 Junio 2013, 01:18 am
por $Edu$
|
|
|
¿Alguien me podría explicar como se descarga SQL?
Desarrollo Web
|
AmAnda01223
|
1
|
1,742
|
7 Agosto 2019, 00:08 am
por Machacador
|
|
|
¿Alguien me podría explicar desde 0 cuánto flota algo?
Foro Libre
|
Tachikomaia
|
8
|
2,225
|
10 Agosto 2024, 00:52 am
por Tachikomaia
|
|