непонятен принцип работы void and(BitSet bitSet)

Следующая программа показывает несколько методов, поддерживаемых структурой данных BitSet в Java

public class BitSetDemo {
public static void main(String args[]) {
     BitSet bits1 = new BitSet(16);
     BitSet bits2 = new BitSet(16);
     
     // set some bits
     for(int i = 0; i < 16; i++) {
        if((i % 2) == 0) bits1.set(i);
        if((i % 5) != 0) bits2.set(i);
     }
    
     System.out.println("Исходная закономерность в bits1: ");
     System.out.println(bits1);
     System.out.println("\nИсходная закономерность в bits2: ");
     System.out.println(bits2);

     // AND биты
     bits2.and(bits1);
     System.out.println("\nbits2 AND bits1: ");
     System.out.println(bits2);

     // OR биты
     bits2.or(bits1);
     System.out.println("\nbits2 OR bits1: ");
     System.out.println(bits2);

     // XOR биты
     bits2.xor(bits1);
     System.out.println("\nbits2 XOR bits1: ");
     System.out.println(bits2);
  }
}````


Получим следующее:

Исходная закономерность в bits1:
{0, 2, 4, 6, 8, 10, 12, 14}

Исходная закономерность в bits2:
{1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14}

bits2 AND bits1:
{2, 4, 6, 8, 12, 14}

bits2 OR bits1:
{0, 2, 4, 6, 8, 10, 12, 14}

bits2 XOR bits1:
{}

Поясните пжл суть "AND", "OR", "XOR" в данном случае. 

Ответы (1 шт):

Автор решения: Егор Малько

Вызывая методы and, or и xor на bits2, вы получаете, что результат записывается в него же. Чтобы сделать то, что вы задумавали, надо сохранить копию bits2 в другую переменную

BitSet bits2copy = bits2.clone();

а затем после каждой из трех операций менять его значение на исходное, например так

bits2 = bits2copy.clone();

В таком случае эти операции будут работать так, как принято в информатике.

→ Ссылка