Uneori ajungem sa ne dorim sa stocam intr-un int mai multe valori booleene( de obicei de dragul artei) pentru a salva a avea mesajele care se trimit pe tiava cat mai mici.
O solutie pe care o propun este sa folosim BitArray.
Acesta ne permite sa lucram cu biti. Pentru a initializa si seta valoriile unui BitArray trebuie sa scriem urmatorul cod:
Acesta ne permite sa lucram cu biti. Pentru a initializa si seta valoriile unui BitArray trebuie sa scriem urmatorul cod:
BitArray bits = new BitArray(32); // 32 - numarul de biti pe care il ocupa un int
bits[0] = true;
...
bits[31] = false;
Urmatorul pas este sa convertim un BitArray in int. Acest lucru se face destul de usor cu metoda CopyTo:
int[] valueConverted = new int[1];
bits.CopyTo(valueConverted,0); // 0 - reprezinta indexul de inceput
int result = valueConverted[0];
In result am obtinut int-ul care contine BitArrat-ul nostru.Pentru a executa procesul invers, sa obtinem un BitArray dintr-un int este nevoie sa apelam metoda statica GetBytes a clasei BitConverter.
BitArray bits = BitConverter.GetBytes(result);
Ce alta solutie aveti pentru aceast task?
Eh, bitarrays, flags.. :)
ReplyDeleteNe obisnuim lenesi si uitam de un banal
int bits |= 1 << pos;
ca sa "stocam" un bit
si (bits & 1< 0
ca sa ii aflam valoarea..
;)
Normal, mai sus corect era:
ReplyDeleteint bits = 0;
bits |= 1 << pos;
if (bits & (1 << pos) != 0) ...