[VB6] &H20? Explicación?

Iniciado por Dunkansdk, 1 Agosto 2012, 02:17 AM

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

Dunkansdk

Hola gente! he visto en algunos códigos que utilizan instrucciones como estas:

Código (vb) [Seleccionar]
If (A And &H20) Then Exit Function
If (C And &H8000) Then Exit Function
If (B And &H8) Then
etc...


La verdad, no soy de utilizar visual basic pero me gustaría entender que son y para que sirven bien  :rolleyes:

tincopasan

supongo q A C B son variables, mientras &H20 &H8000 y &H8 son valores en hexadecimal

Elemental Code

http://es.wikipedia.org/wiki/%C3%81lgebra_de_Boole

AND - OR - NOT - XOR


Son operadores binarios (o booleanos :P)

para entenderlo rapidito. Compara los 1 y 0 de cualquier cosa.
(todo en una pc son 1 y 0 :P)

Los resultados son asi:


A B C
0 AND 0 -> 0
0 AND 1 -> 0
1 AND 0 -> 0
1 AND 1 -> 1

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

Dunkansdk

Bueno si, lo se... Y por lo que djo elemental...
If C And H&8 Then

sería... Si C = 8 -> true?

79137913

#4
HOLA!!!

Cita de: Dunkansdk en  1 Agosto 2012, 15:30 PM
Bueno si, lo se... Y por lo que djo elemental...
If C And H&8 Then

sería... Si C = 8 -> true?

No!

Lo que quiere decir es que si la operacion (C and 8) da true continue.

La operacion (c and 8) dara como resultado un Long, si el long es positivo distinto de 0 sera true, si da 0 sera false y en algunos casos de negativos sera true y en otros false.

TOMAR EN CUENTA:
And: Solo si se comparte el mismo bit en ambos numeros.
Valor 1 = 0 0 1 0 1 0 0 0
Valor 2 = 1 0 1 1 1 0 1 1
       -----------------
Result  = 0 0 1 0 1 0 0 0 = true

Valor 1 = 0 1 0 0 0 1 0 0
Valor 2 = 1 0 1 1 1 0 1 1
       -----------------
Result  = 0 0 0 0 0 0 0 0 = false

Valor 1 = 1 0 1 1 1 1 1 0
Valor 2 = 1 1 1 0 1 1 1 1
       -----------------
Result  = 1 0 1 0 1 1 1 0 = true


Para entender mejor los operadores binarios:
http://foro.elhacker.net/empty-t323992.0.html

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*

BlackZeroX

#5
Código (vb) [Seleccionar]
If (A And &H20) Then Exit Function
If (C And &H8000) Then Exit Function
If (B And &H8) Then
etc...


En ese caso se le llaman MASCARAS DE BITS es decir Filtra TODOS los bits 1 que concuerden (tal cual el ejemplo de @79137913) con que solo sea un numero distinto de 0 se tratara como un valor TRUE PERO si la mascara no retorna un numero distinto cero, es decir, nos retornara el 0 se toma la expresión como FALSE.

* OJO esto en caso de que estén en sentencias de un if then, while, etc...

Existen otros casos como estos:

E = (A and 5 or 10) xor B

en este tipo de expresión NO IMPORTA DONDE SE UBIQUEN inclusive en los if then se toman como operaciones binarias es decir operaciones con bits (revisa los post de arriba).

Dulces Lunas!¡.
The Dark Shadow is my passion.

BlackZeroX

#6
Cita de: Dunkansdk en  1 Agosto 2012, 15:30 PM
Bueno si, lo se... Y por lo que djo elemental...
If C And H&8 Then

sería... Si C = 8 -> true?

Como ya te dije mensione CUALQUIER VALOR distinto de 0 es TRUE para un if then solo se necesita un bit prendido independientemente su posicion...

De alguna manera el TRUE es el complemento de 0 y el complemento es una operación booleana, los tipos de datos unsigned y signed (Lenguaje C/C++ unsigned/signed pero de igual manera en vb6 como currency/long respectivamente) según estos modificadores puede tratarse ese 1 como -1 pero en si es el 1 pero con signo, es decir, si tubieramos un INTEGER:

1bit su valor TRUE seria 1 (unsigned) y -1 (signed)
2bit su valor TRUE seria 3 (unsigned), 1(unsigned, signed) y -1(signed)
3bit su valor TRUE seria 7 (unsigned), 3(unsigned, signed) y 1 (unsigned, signed), -3(signed), -2(signed) y -1(signed)

Es decir, da igual la longitud del entero con que solo haya un bit encendido se puede CONSIDERAR TRUE, peeeero el verdadero valor de TRUE SIEMPRE SERA EL COMPLEMENTO DE 0 es decir TODOS LOS BITS EN 1

ES POR ELLO QUE ESTAS AFIRMACIONES SON CORRECTAS!¡.
NOT FALSE es igual a TRUE
NOT TRUE es igual a FALSE

* En una PC solo existen enteros, los flotantes con una estructura de enteros acomodados de una forma algo peculiar.
* El bit con mayor peso (mas a la izquierda) es el que indica el bit de signo (abre la calculadora de windows ponla en modo programador) escribe un numero NEGATIVO por ejemplo -3 y revisa que el bit mas a la izquierda (independientemente del numero que sea) SIEMPRE SERA 1 por ello para comprobar en binario si un valor almacenado en un LONG es negativo se pone

if (long and &h80000000) then <--- la mascara hace referencia a 10000000000000000000000000000000 en binario
...
end if

por ejemplo

-2& <--- con el & espesificamos que el numero es un long es bianrio seria:  11111111111111111111111111111110

haciendo la mascara seria:

11111111111111111111111111111110 (-2)
10000000000000000000000000000000 (-2147483648 es decir &h80000000)
-----------------------------------------------------
10000000000000000000000000000000 <-- resultado (SE CONSIDERA TRUE en el if then)

puedes revisar algunas operaciones con bits aqui: Recopilacion de Funciones con operaciones Binarias.

Dulces Lunas!¡.
The Dark Shadow is my passion.