Java 位集初始化

Java Bitset initialization

我正在为我的程序使用 BitSet class。 我需要一个内联声明,例如:

BitSet bits1 = new BitSet(); //standard declaration
bits1.set(0,2);
bits1.set(4,6);
System.out.println(bits1); //110011

BitSet bits2 = BitSet.valueOf(new long[] {1,1,0,0,1,1}); //inline
System.out.println(bits2);

使用此代码,我试图在 bits1 中复制相同的 BitSet,在 bits2 中。 问题如下:打印和值不同。 我设置的 BitSet 是 110011。第一个打印出 {0, 1, 4, 5} 这是正确的,因为这是打印带索引的 BitSet 的 "nice" 方式,第二个打印出 {0, 64、256、320}。 如您所见,第二个是错误的。我很确定内联初始化是错误的,但我不知道如何解决这个问题。

数组中的每个 long 代表 64 位。您只需要一个设置了 4 位的长整数:

BitSet bits2 = BitSet.valueOf(new long[] {0b110011});
System.out.println(bits2);
// {0, 1, 4, 5}