BitSet к и от целочисленного/длинного

Если бы у меня есть целое число, на котором я хотел бы выполнить побитовую обработку, как я могу загрузить ее в a java.util.BitSet? Как я могу преобразовать его назад в интервал или долго? Я не так обеспокоен размером BitSet - это всегда будет 32 или 64 бита длиной. Я был бы точно так же, как для использования set(), clear(), nextSetBit(), и nextClearBit() методы, а не побитовые операторы, но я не могу найти простой способ инициализировать немного набора с числовым типом.

51
задан Arnaud 1 January 2017 в 21:22
поделиться

2 ответа

Следующий код создает набор битов из длинного значения и наоборот:

public class Bits {

  public static BitSet convert(long value) {
    BitSet bits = new BitSet();
    int index = 0;
    while (value != 0L) {
      if (value % 2L != 0) {
        bits.set(index);
      }
      ++index;
      value = value >>> 1;
    }
    return bits;
  }

  public static long convert(BitSet bits) {
    long value = 0L;
    for (int i = 0; i < bits.length(); ++i) {
      value += bits.get(i) ? (1L << i) : 0L;
    }
    return value;
  }
}

EDITED: теперь в обоих направлениях, @leftbrain: конечно, вы правы

53
ответ дан 7 November 2019 в 10:03
поделиться

Разве метод public void set(int bit) не то, что вы ищете?

-3
ответ дан 7 November 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: