Class BitUtil


  • public final class BitUtil
    extends Object
    A variety of high efficiency bit twiddling routines.
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static int bitCount​(byte b)
      Return the number of bits sets in b.
      static int bitList​(byte b)
      Return the list of bits which are set in b encoded as followed: (i >>> (4 * n)) & 0x0F is the offset of the n-th set bit of the given byte plus one, or 0 if there are n or less bits set in the given byte.
      static int nextHighestPowerOfTwo​(int v)
      returns the next highest power of two, or the current value if it's already a power of two or zero
      static long nextHighestPowerOfTwo​(long v)
      returns the next highest power of two, or the current value if it's already a power of two or zero
      static long pop_andnot​(long[] arr1, long[] arr2, int wordOffset, int numWords)
      Returns the popcount or cardinality of A & ~B.
      static long pop_array​(long[] arr, int wordOffset, int numWords)
      Returns the number of set bits in an array of longs.
      static long pop_intersect​(long[] arr1, long[] arr2, int wordOffset, int numWords)
      Returns the popcount or cardinality of the two sets after an intersection.
      static long pop_union​(long[] arr1, long[] arr2, int wordOffset, int numWords)
      Returns the popcount or cardinality of the union of two sets.
      static long pop_xor​(long[] arr1, long[] arr2, int wordOffset, int numWords)
      Returns the popcount or cardinality of A ^ B Neither array is modified.
    • Method Detail

      • bitCount

        public static int bitCount​(byte b)
        Return the number of bits sets in b.
      • bitList

        public static int bitList​(byte b)
        Return the list of bits which are set in b encoded as followed: (i >>> (4 * n)) & 0x0F is the offset of the n-th set bit of the given byte plus one, or 0 if there are n or less bits set in the given byte. For example bitList(12) returns 0x43:
        • 0x43 & 0x0F is 3, meaning the the first bit set is at offset 3-1 = 2,
        • (0x43 >>> 4) & 0x0F is 4, meaning there is a second bit set at offset 4-1=3,
        • (0x43 >>> 8) & 0x0F is 0, meaning there is no more bit set in this byte.
      • pop_array

        public static long pop_array​(long[] arr,
                                     int wordOffset,
                                     int numWords)
        Returns the number of set bits in an array of longs.
      • pop_intersect

        public static long pop_intersect​(long[] arr1,
                                         long[] arr2,
                                         int wordOffset,
                                         int numWords)
        Returns the popcount or cardinality of the two sets after an intersection. Neither array is modified.
      • pop_union

        public static long pop_union​(long[] arr1,
                                     long[] arr2,
                                     int wordOffset,
                                     int numWords)
        Returns the popcount or cardinality of the union of two sets. Neither array is modified.
      • pop_andnot

        public static long pop_andnot​(long[] arr1,
                                      long[] arr2,
                                      int wordOffset,
                                      int numWords)
        Returns the popcount or cardinality of A & ~B. Neither array is modified.
      • pop_xor

        public static long pop_xor​(long[] arr1,
                                   long[] arr2,
                                   int wordOffset,
                                   int numWords)
        Returns the popcount or cardinality of A ^ B Neither array is modified.
      • nextHighestPowerOfTwo

        public static int nextHighestPowerOfTwo​(int v)
        returns the next highest power of two, or the current value if it's already a power of two or zero
      • nextHighestPowerOfTwo

        public static long nextHighestPowerOfTwo​(long v)
        returns the next highest power of two, or the current value if it's already a power of two or zero