elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Alguien me podría explicar por qué sucede esto :S
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Alguien me podría explicar por qué sucede esto :S  (Leído 4,570 veces)
*-.Sub-Vorbio.-*

Desconectado Desconectado

Mensajes: 80


"Dos perros pueden matar a un león".


Ver Perfil
Alguien me podría explicar por qué sucede esto :S
« en: 9 Noviembre 2008, 01:40 am »

El código es el siguiente. La duda viene relacionada con el operador "^" en Java.

Código:
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 Desconectado

Mensajes: 233


ReseacheR


Ver Perfil WWW
Re: Alguien me podría explicar por qué sucede esto :S
« Respuesta #1 en: 9 Noviembre 2008, 14:59 pm »

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.

Código
  1. public class Operador {
  2.  
  3. public static void main (String []args){
  4.  
  5. int a,b;
  6. boolean t;
  7. a = 3;
  8. b = 8;
  9.  
  10. t = (a <= b) || (b > a);
  11.  
  12. System.out.println("t:" + t);
  13.  
  14. }
  15. }
  16.  
  17.  


El "o" logico se representa mediante el operador ||, el "Y" mediante &&, etc

Saludos, pruebalo y dime




Edit!

tEstED! Right!

Citar
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 Desconectado

Mensajes: 80


"Dos perros pueden matar a un león".


Ver Perfil
Re: Alguien me podría explicar por qué sucede esto :S
« Respuesta #2 en: 12 Noviembre 2008, 05:57 am »

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"


Citar
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 Desconectado

Mensajes: 455


rie con demencia


Ver Perfil
Re: Alguien me podría explicar por qué sucede esto :S
« Respuesta #3 en: 12 Noviembre 2008, 06:03 am »

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 Desconectado

Mensajes: 80


"Dos perros pueden matar a un león".


Ver Perfil
Re: Alguien me podría explicar por qué sucede esto :S
« Respuesta #4 en: 12 Noviembre 2008, 07:05 am »

No me he sabido explicar bien. Todo sale de este ejercicio:

Código:
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:

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:

Código:
r:true
s:false
t:false

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."
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Alguien me podría explicar por qué sucede esto :S
« Respuesta #5 en: 12 Noviembre 2008, 15:49 pm »

Funciona bien:

Código
  1. public static void main(String[] args) {
  2.        int a,b;
  3. boolean r,s,t;
  4. a = 3;
  5. b = 8;
  6. r = (a == 0) || (b >= a); // false OR true  = TRUE
  7. s = (a != 0) && (b < a);  // true AND false = FALSE
  8. t = (a <= b) ^ (b > a);   // true XOR true  = FALSE
  9. System.out.println("r:" + r);
  10. System.out.println("s:" + s);
  11. System.out.println("t:" + t);
  12.    }

Puedes mirar las tablas de verdad de las operaciones lógicas aquí:
http://es.wikipedia.org/wiki/Compuerta_l%C3%B3gica

Y cuidado con la prioridad de operandos, si dudas usa paréntesis
Salu2
En línea

*-.Sub-Vorbio.-*

Desconectado Desconectado

Mensajes: 80


"Dos perros pueden matar a un león".


Ver Perfil
Re: Alguien me podría explicar por qué sucede esto :S
« Respuesta #6 en: 12 Noviembre 2008, 17:33 pm »

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."
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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 Último mensaje 5 Diciembre 2010, 04:24 am
por leogtz
alguien me podria explicar este codigo...
Desarrollo Web
Paul Young 4 3,778 Último mensaje 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 Último mensaje 9 Junio 2013, 01:18 am
por $Edu$
¿Alguien me podría explicar como se descarga SQL?
Desarrollo Web
AmAnda01223 1 1,742 Último mensaje 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 Último mensaje 10 Agosto 2024, 00:52 am
por Tachikomaia
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines