Zielony Smok - logo witryny

Klasa java.util.BitSet

Tworzymy klasę BitSetTest z metodą main

Tworzymy pusty obiekt klasy BitSet:

BitSet bits1 = new BitSet();

Następnie umieszczamy w nim 10 liczb, od 0 do 9;

bits1.set(0, 10);

Jeżeli wydrukujemy zbiór na konsoli:

System.out.println(bits1);

zobaczymy liczby:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Możemy to sobie wyobrazić następująco:

indeksy 0 1 2 3 4 5 6 7 8 9
bity 1 1 1 1 1 1 1 1 1 1

Nasze liczby są indeksami w tablicy, a to czy liczby brane są pod uwagę zależy od wartości bitu. Jeżeli pod indeksem jest 0 – liczby w zbiorze nie ma. Jeżeli pod liczbą jest 1 – liczba w zbiorze jest.

Dodajemy następny zbiór bitów:

BitSet bits2 = new BitSet();

Dodajemy liczby od 5 do 14:

bits2.set(5, 15, true);

Drukujemy na konsoli:

System.out.println(bits2);

I otrzymujemy wynik:

{5, 6, 7, 8, 9, 10, 11, 12, 13, 14}

Możemy to sobie wyobrazić tak:

indeksy 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
bity 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1

Spójniki logiczne

Wykaz spójniow logicznych:

p q 1 AND 3 4 NOR 6 7 NXOR XOR 10 11 OR IMPR IMP NAND 16
1 1 0 1 0 0 0 1 1 1 0 0 0 1 1 1 0 1
1 0 0 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1
0 1 0 0 0 1 0 0 1 0 1 0 1 1 0 1 1 1
0 0 0 0 0 0 1 0 0 1 0 1 1 0 1 1 1 1

Spójniki stosowane oznaczone są nazwami. Spójniki nie używane – cyframi.

Wykaz oznaczeń:

AND = koniunkcja = p i q

OR = lub = alternatywa

NAND = zaprzeczenie koniunkcji = dysjunkcja Sheffera

NOR = zaprzeczenie alternatywy = „ani p ani q” = binegacja

XOR = albo p albo q = alternatywa wyłączająca = nierównoważność

NXOR = „i p i q” = dopasowanie = równoważność = p jest równoważne z q = <=>

IMP = implikacja = „jeśli p to q” = p -> q = „z p wynika q”

IMPR = implikacja odwrotna = p<-q

Operacja ‘AND’

Wykonujemy operację ‘AND’ na bitach obu zbiorów. Operacje wykonywane są dla pary bitów umieszczonych pod tym samym indeksem w obu zbiorach. Jak pamiętamy operacja ‘AND’ oznacza, że w wyniku znajdą się jedynie liczby (indeksy) pod którymi znajdują się jednocześnie jedynki.

W naszym przykładzie wynik jest umieszczony w zestawie uruchamiającym metody, czyli w bits2. Zestaw bits1 pozostaje bez zmian.

bits2.and(bits1);

Drukujemy wynik na konsoli:

System.out.println(bits2);

Otrzymujemy:

{5, 6, 7, 8, 9}

Możemy to sobie wyobrazić tak:

indeksy 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
bits1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
bits2 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
bits2 po wykonaniu ‘AND’ 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0

Operacja ‘OR’

Podobnie można wykonać operację ‘OR’. Operacje wykonywane są dla pary bitów umieszczonych pod tym samym indeksem w obu zbiorach. Jak pamiętamy operacja ‘AND’ oznacza, że w wyniku znajdą się jedynie liczby (indeksy) jeśli przynajmniej pod jednym indeksem z pary znajduje się jedynka.

bits2.or(bits1);
System.out.println(bits2);

W wyniku otrzymamy:

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}

Możemy to sobie wyobrazić tak:

indeksy 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
bits1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
bits2 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
bits2 po wykonaniu ‘OR’ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Operacja ‘XOR’

Podobnie można wykonać operację ‘XOR’. Operacje wykonywane są dla pary bitów umieszczonych pod tym samym indeksem w obu zbiorach. Jak pamiętamy operacja ‘XOR’ oznacza, że w wyniku znajdą się jedynie liczby (indeksy) jeśli pod jednym indeksem z pary znajduje się jedynka, a pod drugim zero albo odwrotnie.

bits2.xor(bits1);
System.out.println(bits2);

W wyniku otrzymujemy:

{0, 1, 2, 3, 4, 10, 11, 12, 13, 14}

Możemy to sobie wyobrazić następująco:

indeksy 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
bits1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
bits2 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
bits2 po wykonaniu ‘XOR’ 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
Klasa BitSetTest
package java_util_bitset;
import java.util.*;
public class BitSetTest{
	public static void main(String[] args) {
		BitSet bits1 = new BitSet();
		bits1.set(0, 10);
		System.out.println(bits1);
		BitSet bits2 = new BitSet();
		bits2.set(5, 15, true);
		System.out.println(bits2);
		//bits2.and(bits1);
		//bits2.or(bits1);
		bits2.xor(bits1);
		System.out.println(bits2);
	}
}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
{5, 6, 7, 8, 9, 10, 11, 12, 13, 14}
{0, 1, 2, 3, 4, 10, 11, 12, 13, 14}