Area di riferimento
- Developing applications that use system types and collections
- Manage data in a .NET Framework application by using specialized collections. (Refer System.Collections.Specialized namespace)
- BitVector32 structure and BitVector32.Section structure
BitVector32 structure
La struttura BitVector32 permette di gestire a livello di bit un numero a 32 bit. Ecco un esempio di utilizzo:
BitVector32 bit = new BitVector32(12); // creo un vettore di bit il cui contenuto iniziale è il numero 12
Console.WriteLine(bit.ToString()); // Output: BitVector32{00000000000000000000000000001100}
// Costruzione delle maschere necessarie all'accesso agli elementi del vettore di bit
int primoBit = BitVector32.CreateMask();
int secondoBit = BitVector32.CreateMask(primoBit);
int terzoBit = BitVector32.CreateMask(secondoBit);
int quartoBit = BitVector32.CreateMask(terzoBit);
// imposto a 1 il bit meno significativo del vettore di bit
bit[primoBit] = true;
Console.WriteLine( bit.Data ); // Output: 13
La struttura BitVector32 supporta anche il raggruppamento di bit. Questa operazione permette di manipolare tanti piccoli numeri che nel loro insieme costituiscono un numero più grande a 32 bit. Il vantaggio di un tale approccio è un risparmio di memoria nel caso sia necessario operare con tanti numeri il cui valore massimo è abbastanza piccolo. Per prima cosa è opportuno definire quelle che sono le sezioni Section che rappresentano i vari numeri specificando il numero più grande che ciascuna sezione deve essere in grado di memorizzare.
Vediamo un esempio in cui vogliamo utilizzare la struttura BitVector32 per memorizzare tre numeri i cui valori massimi sono rispettivamente 10, 100 e 1000:
BitVector32 gruppo = new BitVector32(0);
// Definisco le sezioni desiderate
BitVector32.Section primaSezione = BitVector32.CreateSection(10);
BitVector32.Section secondaSezione = BitVector32.CreateSection(100, primaSezione);
BitVector32.Section terzaSezione = BitVector32.CreateSection(1000, secondaSezione);
// Assegno un numero alle varie sezioni
gruppo[primaSezione] = 7;
gruppo[secondaSezione] = 49;
gruppo[terzaSezione] = 540;
// Recupero i numeri memorizzati
int primoNumero = gruppo[primaSezione];
int secondoNumero = gruppo[secondaSezione];
int terzoNumero = gruppo[terzaSezione];
Console.WriteLine("{0},{1},{2}", primoNumero, secondoNumero, terzoNumero); // Output: 7,49,540