2016-11-22 4 views
0

Я использую класс BitSet для своей программы. мне нужно инлайн заявление вроде:Инициализация Java 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, который находится в bits1, в bits2. Проблема заключается в следующем: печать и значения различны. BitSet I установлен в 110011. Первый печатает {0, 1, 4, 5}, и это правильно, так как это «хороший» способ печати BitSet с индексами, второй - отпечатки {0, 64 , 256, 320}. Как вы можете видеть, второй неверен. Я уверен, что встроенная инициализация неверна, но я не могу понять, как я могу это исправить.

+1

'long' имеет 64 бит. Вам нужно собрать бит вместе, если вы хотите использовать конструктор 'long []'. –

ответ

4

Каждый длинный массив содержит 64 бита. Вам нужен только один длинный с 4-мя битами:

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

Это сработало для меня! Еще один вопрос: в чем смысл 0b до 110011? Это какая-то константа? – user840718

+4

@ user840718 Он сообщает компилятору, чтобы он читал номер как [двоичный литерал] (https://docs.oracle.com/javase/8/docs/technotes/guides/language/binary-literals.html). – shmosel

+0

Есть ли также встроенный метод, который выводит BitSet в бинарный литерал? – user840718