Java位集初始化

Java位集初始化,java,initialization,bitset,Java,Initialization,Bitset,我正在为我的程序使用BitSet类。 我需要一个内联声明,如: 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); 通过这

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

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);
通过这段代码,我试图复制位s1、位s2中的相同位集。 问题如下:打印和值不同。 我设置的位集是110011。第一个打印出{0,1,4,5},这是正确的,因为这是使用索引打印位集的“好”方法,第二个打印出{0,64,256,320}。
正如你所看到的,第二个是错误的。我很确定内联初始化是错误的,但我不知道如何解决这个问题。

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

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

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

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

long
有64位。如果要使用
long[]
构造函数,需要将位打包在一起。
long
有64位。如果你想使用
long[]
构造函数,你需要将这些位打包在一起。这对我很有用!还有一个问题:110011之前的0b是什么意思?它是一种常量吗?@user840718它告诉编译器将数字读取为。是否还有一个内置方法可以以二进制文字打印出位集?@user840718问得好。我不知道有什么内置方法,但这里有一个有点黑的解决方案:
Arrays.stream(bits2.toLongArray()).mapToObj(l->String.format(“%64s”,Long.tobinarysting(l)).replace(“,”0')).collector(Collectors.joining())
@shmosel你不应该在它的末尾添加一个
.replaceFirst(“^0+,”,“$1”)
()
$1
用于在全零的情况下保留至少一个数字。这对我来说很有用!还有一个问题:110011之前的0b是什么意思?它是一种常量吗?@user840718它告诉编译器将数字读取为。是否还有一个内置方法可以以二进制文字打印出位集?@user840718问得好。我不知道有什么内置方法,但这里有一个有点黑的解决方案:
Arrays.stream(bits2.toLongArray()).mapToObj(l->String.format(“%64s”,Long.tobinarysting(l)).replace(“,”0')).collector(Collectors.joining())
@shmosel你不应该在它的末尾添加一个
.replaceFirst(“^0+,”,“$1”)
()
$1
用于在全零的情况下至少保留一位数字。