como se usa operador logico AND en numeros???

Iniciado por x64core, 24 Mayo 2011, 18:31 PM

0 Miembros y 1 Visitante están viendo este tema.

x64core

Hola buenas panas mi duda siguiente parece mu sencilla
pero la verdad e visto algunos codigos q usan el operador AND para comparacion de numeros y lo q devuelve es otro numero y no tengo idea de como se hace la comparacion para predecir el resultado alguien q pueda explicar por favor! Gracias
dejo un ejemplo :


x = 50 and 100

x = 3 and 1000

x = 25 and 5000

ejemplos asi. :P

79137913

#1
HOLA!!!

El operador logico AND tomara el valor binario de ambos numeros y los comparara de esta manera (sigo tus ejemplos)

x = 50 and 100

   50 = 0100110
  100 = 0010011
       ----------
        0000010   =8

x = 3 and 1000

    3 = 1100000000
 1000 = 0001011111
       --------------
        0000000000   =0
x = 25 and 5000

   25 = 1001100000000
 1000 = 0001000111001
       -----------------
        0001000000000   =32


GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

x64core

:O oh gracias pana pero y el resultado porq varia??? Hace una resta suma?

79137913

#3
HOLA!!!

Mira and lo que hace es comparar los Bits (los unos y ceros)... si hay dos 1 en la misma posicion se coloca un uno en dicha posicion del resultado.

Si no sabes que es el sistema binario te recomiendo este video de u AlteradosPorPi, muy buen programa. http://www.youtube.com/watch?v=ghNtjZ2aP0I

Ahora que ya entendemos mas o menos que es el sistema binario vamos a la operacion AND.

Te lo explico con ejemplos, es mas facil:

x = 50 and 100

    50 = 0100110
   100 = 0010011
        ----------
         0000010   =8

Por que da este resultado?

    50 = 0100110
   100 = 0010011
        ----------
         0000010   =8
         ^^^^^^^
         |||||||____> 0 y 1 son diferentes entonces 0
         ||||||_____> 1 y 1 son iguales entonces 1
         |||||______> 1 y 0 son diferentes entonces 0
         ||||_______> 0 y 0 son iguales entonces 0
         |||________> 0 y 1 son diferentes entonces 0
         ||_________> 1 y 0 son diferentes entonces 0
         |__________> 0 y 0 son iguales entonces 0

x = 58 and 232

    58 = 01011100
   232 = 00010111
        ----------
         00010100   =40

Por que da este resultado?

    58 = 01011100
   232 = 00010111
        ----------
         00010100   =40
         ^^^^^^^^
         ||||||||____> 0 y 1 son diferentes entonces 0
         |||||||_____> 0 y 1 son diferentes entonces 0
         ||||||______> 1 y 1 son iguales entonces 1
         |||||_______> 1 y 0 son diferentes entonces 0
         ||||________> 1 y 1 son iguales entonces 1
         |||_________> 0 y 0 son iguales entonces 0
         ||__________> 1 y 0 son diferentes entonces 0
         |___________> 0 y 0 son iguales entonces 0




GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

79137913

HOLA!!!

LEE ARRIBA ^^^^^^

Ahi te actualice la explicacion, espero que entiendas, por si las dudas te dejo como funcionan:
OR es parecido solo que con que uno de los dos sea 1 en esa posicion sera 1.
XOR es parecido a OR pero solo devuelve 1 en esa posicion si uno de los 2 (no los dos, osea 1, 1 es 0, pero 1,0 o 0,1 es 1).

GRACIAS POR LEER!!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

x64core

 ;-) ;-) ;-) lo entendi perfectamente pana!!! Gracias!!!
Solo me resta entender para q puedo utilizar o en q ocasiones usar el and en numeros :P gracias!!!

79137913

HOLA!!!

Primero, aca te dejo un reto donde Black y yo hicimos funciones que emulan los operadores binarios, hay una breve explicacion y estan los codigos, espero que entiendas ;) http://foro.elhacker.net/empty-t323992.0.html

Te pongo un ejemplo de para que sirve:

Saber si un numero es par o no:
Código (vb) [Seleccionar]
Private Sub Form_Load()
    For x = 0 To 100
        If (x And 1) Then
            Debug.Print "no_es_par " & x
        Else
            Debug.Print "si_es_par " & x
        End If
    Next
End Sub


GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

x64core

gracias pana me haz aclarado todo! Hasta lo previsto ;-) c t agradece mucho!

BlackZeroX

#8
Solo aclaro que los numeros binarios de leen de derecha a izquierda mas no de izquierda a derecha

P.E.



Esto esta MAL.
    58 = 01011100   <--- Este binario no es 58 realmente es el numero 92
   232 = 00010111  <--- Este binario no es 232 realmente es el numero 23
        ----------
         00010100   =40  <--- Este binario no es 40 realmente es el numero 20



Realmente es asi:



CORRECTO:
    58 = 00111010
   232 = 11101000
        ----------
         00101000   =40



Esto es debida a que los 0 a la izquierda del ultimo 1 no tienen valor alguno pero si los 0 a la derecha

... (2a la N) ... 128 64 32 16 8 4 2 1 0
<-----------------------------------|
Dulces Lunas!¡.
The Dark Shadow is my passion.

79137913

HOLA!!!

Opss, no me di cuenta xD.

:P cuando lo hacia en papel siempre lo pensaba al reves de esto:
Cita de: BlackZeroX▓▓▒▒░░ en  8 Junio 2011, 04:29 AM
... (2a la N) ... 128 64 32 16 8 4 2 1 0
<-----------------------------------|

Igual como tambien leia al reves, no habia problema, los resultados me daban bien XD.

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*