All'interno di Visual Basic esistono varie funzioni che restituiscono
un numero intero rappresentante più stati di un determinato elemento.
Un esempio lampante è la funzione GetAttr che restituisce
un numero intero i cui bit indicano lo stato dei diversi attributi del
file.
Il numero restituito da GetAttr contiene 7 bit fondamentali; per
trovare i singoli attributi del file basta estrarli uno per uno tramite
un paragone AND bit a bit. Questi 7 bit indicano:
Bit |
Valore |
Costante |
Rappresentazione |
Funzione |
1 |
1 |
vbReadOnly |
0000 0001 |
Sola lettura |
2 |
2 |
vbHidden |
0000 0010 |
Nascosto |
3 |
4 |
vbSystem |
0000 0100 |
Di sistema |
4 |
8 |
vbVolume |
0000 1000 |
Volume (non utilizzato) |
5 |
16 |
vbDirectory |
0001 0000 |
Directory (cartella) |
6 |
32 |
vbArchive |
0010 0000 |
Archivio |
7 |
64 |
vbAlias |
0100 0000 |
Alias (non utilizzato) |
Facciamo un esempio pratico: Valore = GetAttr("C:\IO.SYS")
Dopo quest'operazione la variabile Valore conterrà il numero
intero 7. Da sè questo numero non rappresenta alcun bit di stato
visto sopra. È necessario effettuare un'estrazione bit a bit. Effettuiamo
queste semplici operazioni di AND:
Valore AND vbReadOnly Risultato:
1 (vbReadOnly)
Valore AND vbHidden Risultato:
2 (vbHidden)
Valore AND vbSystem Risultato:
4 (vbSystem)
Valore AND vbVolume Risultato:
0
Valore AND vbDirectory Risultato: 0
Valore AND vbArchive Risultato:
0
Valore AND vbAlias Risultato:
0
Questo avviene perché l'operatore AND
restituisce il valore TRUE solo
quando i bit impostati a 1 del primo numero hanno un corrispondente bit
impostato a 1 nel secondo numero.
Vediamo in numeri quanto abbiamo detto, subito dopo aver convertito
il numero decimale 7 in un numero a base binaria. Il valore 7 diventa
per cui 00000111.
- 0000 0111 (7) AND
0000 0001 (vbReadOnly) =
---------
0000 0001 (vbReadOnly - Il file è di sola lettura)
- 0000 0111 (7) AND
0000 0010 (vbHidden) =
---------
0000 0010 (vbHidden - Il file è nascosto)
- 0000 0111 (7) AND
0000 0100 (vbSystem) =
---------
0000 0100 (vbSystem - Il file è di sistema)
- 0000 0111 (7) AND
0000 1000 (vbVolume) =
---------
0000 0000 (Non è un Volume)
- 0000 0111 (7) AND
0001 0000 (vbDirectory) =
---------
0000 0000 (Non è una Directory)
- 0000 0111 (7) AND
0010 0000 (vbArchive) =
---------
0000 0000 (Stato di archivio non impostato)
- 0000 0111 (7) AND
0100 0000 (vbAlias) =
---------
0000 0000 (Il file non è un Alias)
In Visual Basic ci sono molte funzioni che agiscono in tal modo: raggruppando
in un solo numero lo stato di più valori.
|