Codificare

Presupunem că avem vectorul unsigned char s[3]; . s[0], s[1], s[2] fiecare reprezintă câte o variabilă pe 8 biți pe care initial ii setam pe 0.

s[0] s[1] s[2]
$b_7$$b_ 6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$ $b_7$$b_6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$ $b_7$$b_6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$
biti din S 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

În plus facem următoarea asociere:

s[0] s[1] s[2]
$b_7$$b_ 6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$ $b_7$$b_6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$ $b_7$$b_6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$
biti din S 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
numere asociate76543210 15141312111098 2322212019181716

Explicație:

  • numerele 0, 8, 16 au fost asociate cu bitul 0 ($b_0$) in bytes diferiti. Pentru că toate dau restul impartirii la 8 egal cu 0;
  • numerele 1, 9, 17 au fost asociate cu bit-ul 1 ($b_1$). Pentru că toate dau restul impartirii la 8 egal cu 1;
  • numerele 2, 10, 18 au fost asociate cu bit-ul 2 ($b_2$). Pentru că toate dau restul impartirii la 8 egal cu 2;
  • numerele 3, 11, 19 au fost asociate cu bit-ul 3 ($b_3$). Pentru că toate dau restul impartirii la 8 egal cu 3;
  • numărul i a fost asociat cu bitul (i % 8) in byte-ul (i / 8)!

Observație! card_set(s) == 0 (0 elemente in s) și is_empty_set(s) == 1 (este adevărat că s e gol).

Insert - exemplu 1

Să presupunem că pe mulțimea s de mai sus (inițial goală) se execută operația următoarea:

insert_in_set(s, 8);

Noua mulțime s este s = {8} și arată astfel:

s[0] s[1] s[2]
$b_7$$b_ 6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$ $b_7$$b_6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$ $b_7$$b_6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$
biti din S 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
numere asociate76543210 15141312111098 2322212019181716

Explicație: numărul 8 a fost asociat cu bitul 0 ( 8 % 8 ) in byte-ul 1 (8 / 8). Acest bit a fost facut 1.

Observație! card_set(s) == 1 (1 element in s) și is_empty_set(s) == 0 (este false că s e gol).

Insert - exemplu 2

Să presupunem că pe mulțimea s curentă se execută operația următoarea:

insert_in_set(s, 19);

Noua mulțime s este s = {8, 19} și arată astfel:

s[0] s[1] s[2]
$b_7$$b_ 6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$ $b_7$$b_6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$ $b_7$$b_6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$
biti din S 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0
numere asociate76543210 15141312111098 2322212019181716

Explicație: numărul 19 a fost asociat cu bitul 3 ( 19 % 8 ) in byte-ul 2 (19 / 8). Acest bit a fost facut 1.

Observație! card_set(s) == 2 (2 elemente in s) și is_empty_set(s) == 0 (este false că s e gol).

Verificare - exemplu 1

Să presupunem că pe mulțimea s curentă se execută următoarele 2 operații:

printf("%d", is_in_set(s, 3));    // afișează 0
printf("%d", is_in_set(s, 19));   // afișează 1
  • is_in_set(s, 3) returnează 0 pentru că 3 NU face parte din s (bitul $b_3$ din byteul s[0] este egal cu 0)
  • is_in_set(s, 19) returnează 1 pentru că 19 face parte din s (bitul $b_3$ din byteul s[2] este egal cu 0)

Delete - exemplu 1

Să presupunem că pe mulțimea s curentă se execută operația următoarea:

delete_from_set(s, 19);

Noua mulțime s este s = {8} și arată astfel:

s[0] s[1] s[2]
$b_7$$b_ 6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$ $b_7$$b_6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$ $b_7$$b_6$$b_5$$b_4$$b_3$$b_2$$b_1$$b_0$
biti din S 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
numere asociate76543210 15141312111098 2322212019181716

Explicație: numărul 19 a fost asociat cu bitul 3 ( 19 % 8 ) in byte-ul 2 (19 / 8). Acest bit a fost facut 0.

Observație! card_set(s) == 1 (1 element in s) și is_empty_set(s) == 0 (este false că s e gol).

Verificare - exemplu 1

Să presupunem că pe mulțimea s curentă se execută următoarele 2 operații:

printf("%d", is_in_set(s, 19));   // afișează 0
  • is_in_set(s, 19) returnează 0 pentru că 19 NU mai face parte din S (bitul $b_3$ din byteul s[2] este egal cu 0)
programare/laboratoare/lab07-bitset-example.txt · Last modified: 2018/11/07 18:09 by darius.neatu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0