Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: theghost_te en 12 Marzo 2013, 04:07 am



Título: [RESUELTO]no le entiendo del todo el and, or , not y xor
Publicado por: theghost_te en 12 Marzo 2013, 04:07 am
el and , or yo lo se usar de esta forma:

Código
  1. if txtclave.text = "popeye" and txtnombre.text = "coder" then
  2.     msgbox "nombre y clave correctos"

lo interpreto asi: si clave es "popeye" Y nombre es "coder" entonces mostrar "clave y nombre correcto"
esto es facil de entender, pero en muchis codigos que he checado , lo usan de otra forma muy complicadisima incluso le agregan sumas y restas:

Código
  1. if (x and b) + (h or d) then


¿¿¿??? ¿que es esto? como se interpreta?, ademas lo guardan en una variable :

Código
  1. R = (x and b) + (h or d)

otra cosa que no le entiendo es cuando le ponen el not :

Código
  1. [code]if not (x and b) + (h or d) then
[/code]


peor se me hace dificilisimo entender cuando le ponen muchas sumas restas muliplicacion y division , porque no se le entiende cual de las operaciones es la que se realiza primero, jemplo he checado codes como este:

Código
  1. R = not b and g or t and d + 45 or 2 * 5

¿¿¿???

ayuda, no logro entender, me duele la cabeza.


Título: Re: no le entiendo del todo el and, or , not y xor
Publicado por: 79137913 en 12 Marzo 2013, 12:07 pm
HOLA!!!

Leete este reto completo y podras apreciar como funcionan internamente esos operadores:
    [RETO] Reemplazo de Operadores Binarios. (http://foro.elhacker.net/empty-t323992.0.html)

Ante cualquier duda que surja me avisas

GRACIAS POR LEER!!!


Título: Re: no le entiendo del todo el and, or , not y xor
Publicado por: Danyfirex en 12 Marzo 2013, 14:14 pm
mira esto así lo entiendes.

http://es.wikipedia.org/wiki/Puerta_l%C3%B3gica


Igual te explico lo tuyo.

Recuerda que cuando haces operaciones >,=,< Etc. siemrpe obtienes un retorno booleano de esa operacion.

Código
  1. Private Sub Form_Load()
  2. Dim c As Boolean
  3. c = 1 = 1 ' si son iguales obtienes true(Verdadero)
  4. MsgBox (c)
  5. c = 1 = 2 ' si son iguales Diferente False(falso)
  6. MsgBox (c)
  7. End Sub
  8.  


Código
if txtclave.text = "popeye" and txtnombre.text = "coder" then
     msgbox "nombre y clave correctos"

Respuesta:

Eso quiere decir.

que si el texto del textbox es igual a popeye otenemos un "true" y el textbox2 igual a coder otendremos otro "true"

como usamos la compueta AND. Mira la tabla AND en wikipedia
entonces

llevandolo a lo logico nos queda

true and true

segun la tabla nos dice que

1 and 1 = 1 lo mismo que decir true and true=true

y asi todo quedo resuelto segun la tabla de la compuerta logica AND.

Código
if (x and b) + (h or d) then


¿¿¿??? ¿que es esto? como se interpreta?, ademas lo guardan en una variable :

Respuesta.

Código
  1. Private Sub Form_Load()
  2. Dim c As Boolean
  3. Dim a As Boolean
  4. Dim b As Boolean
  5. 'Seria algo así,claro respectivamente de los valores. yo te puse con true y false
  6. a = (True And False)
  7. b = (True or True) ' te toca mirar la tabla de la compuerta or en wikipedia
  8. c = a + b
  9. MsgBox (c)
  10.  
  11. End Sub
  12.  




Código
R = (x and b) + (h or d)

respuesta:


aquí igual que arriba solo que asignas el resultado a una variable booleana.




otra cosa que no le entiendo es cuando le ponen el not :

Código
Código:
if not (x and b) + (h or d) then

Respuesta:


Esta es la mas fácil porque not que hace es invertir si es Not(true) te da false. y not(false) te da true.




peor se me hace dificilisimo entender cuando le ponen muchas sumas restas muliplicacion y division , porque no se le entiende cual de las operaciones es la que se realiza primero, jemplo he checado codes como este:

Código
R = not b and g or t and d + 45 or 2 * 5

¿¿¿???

ayuda, no logro entender, me duele la cabeza.

Respuesta:

Ahi lo unico que tienes que hacer es usar "()" para ordenarlo y verlo mas comodo

Código
  1. R = Not ((b And g) Or (t And d) + (45 Or 2 * 59))



Lo mas importante practicar. y mirar la wiki un buen rato.

Perdon por los errores escribi rapido.  espero se entienda.
Saludos


Título: Re: no le entiendo del todo el and, or , not y xor
Publicado por: $Edu$ en 12 Marzo 2013, 14:35 pm
Código
  1. if (x and b) + (h or d) then

Ahi lo que hace es hacer un And y un Or con esas variables, si miraste lo que dejo 79137913 entonces ya sabras que cuenta han hecho (con sus binarios), y luego suma los 2 binarios resultantes, para quedar con un numero binario, que si es distinto de 0 entonces sera True la condicion del if y por lo tanto se cumple la condicion y hara lo que sigue despues del Then.
Recuerda que True es un booleano pero pasado a integer es 1. Y False a integer es 0.
Y 0 pasado a booleano es False, pero cualquier otra numero distinto de 0 pasado a booleano es True.

Código
  1. R = (x and b) + (h or d)

Ahi lo que hace es guardar el numero en una variable, esa variable puede ser booleana o un integer por ejemplo, no recuerdo si en vb6 era necesario hacer el cambio de tipo de variables o si lo hace solo, creo que lo hace solo si. Asi que si esa suma da un numero distinto de 0 entonces pondra True a la variable R en caso de que sea booleana pero si es una variable integer entonces pondra el numero que le corresponda, por ejemplo 23512 que se yo.

Código
  1. if not (x and b) + (h or d) then

Lo unico que cambia ahi es el uso de "not" que es para hacer lo opuesto al resultado, es decir, si la suma esa da True, entonces la condicion dice: Si NO es True, entonces... Es decir, es como si fuera if (x and b) + (h or d) = False then. Pero algunos odian poner eso y se ahorran poner el "igual a " ya que si no pones nada entonces se sabe que se refiere a que queres que el valor de esa condicion sea True.


Código
  1. R = not b and g or t and d + 45 or 2 * 5

Aca te recomiendo mirar esto, si no entiendes ingles, lo puedes traducir:

http://msdn.microsoft.com/en-us/library/fw84t893

pd: Gracias Danyfirex por el link.


Título: Re: no le entiendo del todo el and, or , not y xor
Publicado por: theghost_te en 17 Marzo 2013, 03:15 am
grax a todos me sirvio, Danyfirex ese ejemplo que das es facil de entender, yo antes ni sabia que una expresion te daba un resultado true-false, ahora segun mis apuntes los parentesis es para indicar que lo que esta dentro se ejecute antes que lo demas, pero tengo una duda : si no le pongo nada de parentesis como se ejecutarian? es decir que orden, por ejemplo la sgte linea:

Código:
R = not b and g or t and d + 45 or 2 * 5 

¿cuales se ejecutarian antes que las demas?, otra preguntita el not niega a todo lo que se encuenbtra a su derecha, incluyendo todas las expresionmes que haya?


Código:
R = not b and g or t and d + 45 or 2 * 5 


se niega solo "b" o todo el resultado que de todas las expresiones?



gracias

edit:

algun enlace donde aprender estas cosas del not, and, or etc pero en vb? el tema me queda claro , lo que no me queda muy claro es el orden en que se ejecutan, porque varias veces hay lineas de code muy pero muuuuuuuuuuuy anidados (NOTs dentro de ANDs dentro de ORs con sumas, restas y llamadas a otras funciones), o si pudieran explicarme se lo agradeceria, necesito entender al 100 % este tema.


edit 2:

cuando hacemos un Not asi :
Código:
if Not Funcion(Parametro) = 0 then

se obliga al if a que espere un resultado tipo false, o se invierte el resultado de la expresion?


Título: Re: no le entiendo del todo el and, or , not y xor
Publicado por: tincopasan en 17 Marzo 2013, 07:08 am
quizá deberiás usar el debugger de vb y realizar cada operación línea a línea, así verias el resutado de cada operación y sabrías que toma o no.


Título: Re: no le entiendo del todo el and, or , not y xor
Publicado por: MCKSys Argentina en 17 Marzo 2013, 08:23 am
Necesitas saber la precedencia de operadores:

En VB 2005, aunque debería ser igual a VB6: http://msdn.microsoft.com/es-es/library/fw84t893(v=vs.80).aspx (http://msdn.microsoft.com/es-es/library/fw84t893(v=vs.80).aspx)

En VBScript (lo mismo): http://javascripts.astalaweb.com/Ayuda/html/vsgrpoperatorprecedence.asp (http://javascripts.astalaweb.com/Ayuda/html/vsgrpoperatorprecedence.asp)

Mas: http://www.google.com.ar/search?q=vb6+precedencia+de+operadores&ie=utf-8&oe=utf-8 (http://www.google.com.ar/search?q=vb6+precedencia+de+operadores&ie=utf-8&oe=utf-8)

Saludos!


Título: Re: no le entiendo del todo el and, or , not y xor
Publicado por: $Edu$ en 17 Marzo 2013, 16:15 pm
Ya te habia dejado un link que responde a todas tus preguntas...


Título: Re: no le entiendo del todo el and, or , not y xor
Publicado por: arts en 17 Marzo 2013, 20:34 pm
Un truquito:
Sabiendo que true = 1 y false = 0 y que los AND se suelen corresponder por multiplicaciones y los Or por Sumas. entonces según esto....

1 And 1 = es como decir 1 * 1 = 1 y 1 hemos dicho que era true
1 Or 1 = es como decir 1+1 pero como solo se usan 1 y 0 se queda en 1
false And true = es como decir 0*1 = 0 es decir false

Así sucesivamente con todos.


Título: Re: no le entiendo del todo el and, or , not y xor
Publicado por: theghost_te en 19 Marzo 2013, 03:08 am
 :D  :D  :D  :D  gracias gracias gracias eso era lo que me faltaba entender.

$Edu$ , si tienes razon solo que no lo entendia bien porque esta en english, igual gracias.

MCKSys Argentina , muchas grax man en los 2 primeros enlaces esta exactamente lo que queria, creo que el primer es la version en español del enlace que me paso $Edu$ ¿o me parece?

ahora a imprimirlo y leerlo.


salu2