Я просто хочу преобразовать целое число в двоичную строку с помощью BitSet.BitSet toString() и valueOf() трудно понять
Мой код ниже.
public class BitSetTest {
public static void main(String[] args) {
//Method_1
int value = 10; //0b1010
String bits = Integer.toBinaryString(value);
BitSet bs = new BitSet(bits.length());
for (int i = 0; i < bits.length(); i++) {
if (bits.charAt(i) == '1') {
bs.set(i);
} else {
bs.clear(i);
}
}
System.out.println(bs); //{0, 2} so 0th index and 2nd index are set.
System.out.println(Arrays.toString(bs.toLongArray())); //prints [5]
System.out.println(Arrays.toString(bs.toByteArray()));
//Method_2
value = 42;
System.out.println(Integer.toBinaryString(value)); //101010
BitSet bitSet = BitSet.valueOf(new long[] { value });
System.out.println(bitSet);
System.out.println(Arrays.toString(bitSet.toLongArray())); // prints [42]
System.out.println(Arrays.toString(bitSet.toByteArray()));
}
}
Q1) Что я не понимал; который является правильным подходом (Method_1 или Method_2). Method_1 кажется правильным, но bs.toLongArray()
дает разные результаты.
Q2) Не могли бы вы объяснить это api public static BitSet valueOf(long[] longs)
принимает массив длинных значений вместо одного длинного ..? И что действительно делает с этим массивом.
Java-документ говорит ниже; но я действительно не понял смысла.
Более точно, BitSet.valueOf (длинные позиции) .get (п) == ((длинные позиции [п/64] & (1L < < (п% 64)))! = 0)
для все n < 64 * longs.l длина.
Просьба помочь.
Спасибо !!!, Не могли бы вы ответить на мой второй вопрос? –
Ничего себе !! Отличная информация !!! Спасибо!!! –