Search code examples
javabit-manipulationbitset

BitSet to and from integer/long


If I have an integer that I'd like to perform bit manipulation on, how can I load it into a java.util.BitSet? How can I convert it back to an int or long? I'm not so concerned about the size of the BitSet -- it will always be 32 or 64 bits long. I'd just like to use the set(), clear(), nextSetBit(), and nextClearBit() methods rather than bitwise operators, but I can't find an easy way to initialize a bit set with a numeric type.


Solution

  • The following code creates a bit set from a long value and vice versa:

    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: Now both directions, @leftbrain: of cause, you are right