Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/05/2010, 06:21
Avatar de Eternal Idol
Eternal Idol
 
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: GetLogicalDrives y AND binario

La potencia representa la mascara necesaria para usando el AND con cada bit saber si la unidad existe o no.
Hay un error minimo en el programa y es empezar el bucle con i siendo 1, de esa manera nunca se comprueba si A esta disponible o no.

En la variable info se guarda la mascara de bits con todas las unidades, por ejemplo:
0x0000005D

En ese caso el programa muestra (falta A:\ por lo que explique antes):
C:\ D:\ E:\ G:\

Hagamoslo a mano:
0x0000005D es 01011101 en binario.

Como podemos ver el primer bit (el menos significante, ver MSDN) tiene como valor 1. Eso quiere decir que la unidad A esta disponible. El segundo bit tiene como valor 0 asi que B no esta disponible, el tercero tiene como valor 1 asi que C esta disponible y asi sucesivamente.


¿Como hace el programa para comprobar si la unidad esta disponible? Primero calcula la mascara necesaria y despues hace la operacion AND. La mascara se calcula mediante la potencia de 2 a la i (numero de unidad).

Entonces: 2 ^ 0 = 1, 2 ^ 1 = 2, 2 ^ 2 = 4, etc.

Si quedamos en que info es 0x0000005D, tenemos que la primera pasada (inicializando a i como 0) hara esto:

0x0000005D & 0x1, el resultado es 0x1 y por lo tanto la unidad esta disponible.

La segunda pasada:
0x0000005D & 0x2, el resultado es 0 y por lo tanto la unidad no esta disponible.

Tercera pasada:
0x0000005D & 0x4, el resultado es 0x4 y por lo tanto la unidad esta disponible.


Y asi sucesivamente, si cambias la inicializacion del bucle for de i=1 a i=0 entonces el programa mostrara correctamente A.


Si todavia no te queda claro lo de las mascaras lee esto sobre AND que explica con bits:
http://en.wikipedia.org/wiki/Bitwise_operation#AND
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO