Het is soms handig om een heleboel booleans op te slaan als een integer. Waarom je dit zou willen doen is simpel. Je kan dan namelijk altijd het aantal booleans groter maken. En de waarde nog steeds in een veld opslaan. Een voorbeeld is bijvoorbeeld als je de bezetting van een ruimte wil opslaan. tussen 8 en 9 bezet, tussen 9 en 10 vrij, tussen 10 en 11 vrij en tussen 11 en 12 bezet.
Dit doe je als volgt.
Eerst geef je alle booleans een index beginnend vanaf 0.
Dus tussen 8 en 9 wordt 0,
tussen 9 en 10 wordt 1
en tussen 10 en 11 wordt 2,
enz.
Code om een bitarray te maken en de waardes op de verschillende indexen in te stellen. Hierna zal het ook worden veranderd in een Integer.
| 01 | |
| 02 | //Bovenaan |
| 03 | using Systems.Collections |
| 04 | |
| 05 | BitArray bits = new BitArray(4,false); //We willen een bitarray met 4 bits en alles moet op false staan. |
| 06 | |
| 07 | bits[0] = true; //tussen 8 en 9 bezet |
| 08 | bits[1] = false; //tussen 9 en 10 vrij |
| 09 | bits[2] = false; //tussen 10 en 11 vrij |
| 10 | bits[3] = true; //tussen 11 en 12 bezet |
| 11 | //Eigenlijk heeft die in het geheugen nu 1 0 0 1 staan. |
| 12 | |
| 13 | //Nu gaan we van deze bitarray een integer maken. |
| 14 | Int32 waarde = Sytem.BitConverter.ToInt32(bits,0); |
| 15 | //waarde bevat nu 9 (1*2^3 (=8) + 0*2^2 (=0) + 0*2^1 (=0) + 1*2^0 (=1)); |
| 16 | //Deze waarde kan nu worden opgeslagen. |
Nou hebben we een aantal booleans opgeslagen in een integer. Maar nu willen we het er ook nog uithalen.
Dit kunnen we als volgt doen.
| 01 | |
| 02 | Int32 waarde = 9; |
| 03 | BitArray bits = new BitArray(System.BitConverter.GetBytes(waarde)); |
| 04 | for(Int32 i=0; i < bits.length()-1; i++) |
| 05 | { |
| 06 | if(bits[i]) |
| 07 | Console.Writeline("Bit met index " + i.ToString() +" is true."); |
| 08 | } |
| 09 | //Dit zal de volgende output geven: |
| 10 | //Bit met index 0 is true. |
| 11 | //Bit met index 3 is true. |
| 12 | |
Nu weten jullie een begin van de BitArray. Gebruik goolge om meer te weten te komen.