Java Bitset初始化

use*_*718 1 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);
Run Code Online (Sandbox Code Playgroud)

有了这个代码,我试图复制相同的位集合是在BITS1,在BITS2.问题如下:打印和值不同.我设置的BitSet是110011.第一个打印出{0,1,4,5}并且它是正确的,因为这是用索引打印BitSet的"好方法",第二个打印出{0,64, 256,320}.你可以看到第二个是错的.我很确定内联初始化是错误的,但我无法弄清楚如何解决这个问题.

shm*_*sel 5

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

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

  • @ user840718它告诉编译器将数字读作[二进制文字](https://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html). (4认同)