IL FUNZIONAMENTO DELLE FLAGS
Esempi pratici e teorici.
1)
Se volessimo salvare due informazioni di qualunque genere utilizzando due numeri (quindi due valori
differenti del registro di configurazione), che chiameremo X
e Y, potremmo, ad esempio, impostare X su 0
quando la macchina è spenta e
su 1 quando è accesa; alla
stessa maniera potremmo impostare Y su 0
quando la radio è spenta
e su 1 quando è accesa. Ma
come potremmo fare a impostare in un solo numero queste due
impostazioni? Immaginiamo di avere solamente la X
questa volta, basterebbe attribuire allo stato del motore della
macchina un numero, in questo caso utilizzeremo 1,
e allo stato della radio un altro, facciamo 2.
Proviamo a combinarli.
Stato motore |
Valore per lo stato del motore |
Stato radio |
Valore per lo stato della radio |
Corrispondente valore della X |
Acceso |
1 |
Acceso |
2 |
3 |
Spento |
0 |
Acceso |
2 |
2 |
Acceso |
1 |
Spento |
0 |
1 |
Spento |
0 |
Spento |
0 |
0 |
2) Come avrete notato alla X
corrisponde la somma del valore dello stato
del motore e del valore per lo stato della radio.
Possiamo quindi, osservando i valori della X,
dedurre che se la X è 3 (1+2)
significa che sia il motore, sia la radio
sono accesi; se X è 2 (0+2) significa che solamente la radio
è accesa; se X è 1 (1+0) significa che solo il motore è acceso
e infine se X è 0 né
il motore, né la radio sono accesi.
Stessa cosa vale per un'impostazione del registro di
configurazione.
Ecco un altro esempio. Estendiamo il precedente aggiungendo lo stato
del finestrino.
Stato motore |
Valore per lo stato del motore |
Stato radio |
Valore per lo stato della radio |
Stato finestrino |
Valore per lo stato del finestrino |
Corrispondente valore della X |
Acceso |
1 |
Acceso |
2 |
Aperto |
3 |
6 |
Spento |
0 |
Acceso |
2 |
Aperto |
3 |
5 |
Acceso |
1 |
Spento |
0 |
Aperto |
3 |
4 |
Spento |
0 |
Spento |
0 |
Aperto |
3 |
3 |
Acceso |
1 |
Acceso |
2 |
Chiuso |
0 |
3 |
Spento |
0 |
Acceso |
2 |
Chiuso |
0 |
2 |
Acceso |
1 |
Spento |
0 |
Chiuso |
0 |
1 |
Spento |
0 |
Spento |
0 |
Chiuso |
0 |
0 |
3) Analizziamo valore per valore la X.
- X=1+2+3=6:
nessun problema, il motore e la radio sono accesi e il
finestrino è aperto.
- X=0+2+3=5:
tutto a posto, motore spento, radio accesa e finestrino
aperto.
- X=1+0+3=4:
motore accesso, radio spenta, finestrino aperto.
- X=1+2+0=3 e X=0+0+3=3:
qui sorge il problema; come avrete notato nel primo caso
il motore e la radio
sono accesi ma il finestrino
è chiuso mentre nel secondo motore
e radio sono spenti e
il finestrino è aperto.
Nonostante questa differenza entrambe le somme danno 3.
Come mai? L'errore sta nell'aver impostato il valore per
lo stato del finestrino positivo (cioè il valore che
indica che il finestrino è aperto) su 3. Per evitare
questi tipi di errori è necessario dare dei valori di
stato che siano una potenza del 2 (2, 4, 8, 16...).
Ricompiliamo la tabella sostituendo al 3
il 4.
Stato motore |
Valore per lo stato del motore (20) |
Stato radio |
Valore per lo stato della radio (21) |
Stato finestrino |
Valore per lo stato del finestrino
(22) |
Corrispondente valore della X |
Acceso |
1 |
Acceso |
2 |
Aperto |
4 |
7 |
Spento |
0 |
Acceso |
2 |
Aperto |
4 |
6 |
Acceso |
1 |
Spento |
0 |
Aperto |
4 |
5 |
Spento |
0 |
Spento |
0 |
Aperto |
4 |
4 |
Acceso |
1 |
Acceso |
2 |
Chiuso |
0 |
3 |
Spento |
0 |
Acceso |
2 |
Chiuso |
0 |
2 |
Acceso |
1 |
Spento |
0 |
Chiuso |
0 |
1 |
Spento |
0 |
Spento |
0 |
Chiuso |
0 |
0 |
3) Ora passiamo a esaminare una voce
del registro che contiene delle Flags.
Aprite Regedit e andate alla chiave HKEY_CURRENT_USER\Control
Panel\Accessibility\TimeOut alla voce Flags.
Essa contiene alcune impostazioni relative ad Accesso
Facilitato. Applichiamo la nostra solita tabella, dove A
se è 1 significa che "dopo aver
aspettato i millisecondi specificati in TimeToWait (situato nella
stessa chiave) a partire dall'ultimo utilizzo di una funzione di
Accesso Facilitato disattivane tutte le funzionalità" e se B è 2
significa che "si deve emettere un segnale acustico
quando si attiva o disattiva una funzionalità di Accesso
Facilitato".
Valore per A |
Valore per B |
Corrispondente valore della X |
1 |
2 |
3 |
0 |
2 |
2 |
1 |
0 |
1 |
0 |
0 |
0 |
|