Я раскладываю одиночный long на long [] однобитовых long по
public static int decompose(long[] buffer, long base) {
int count = Long.bitCount(base);
for (int i=0; i
, но мне кажется, что может быть более быстрый способ сделайте это, поскольку кажется, что есть несколько повторяющихся шагов. Например, подсчет битов уже должен быть достаточно близок к получению всей информации, необходимой для заполнения результата.
Есть предложения? Я знаком с мантрой преждевременной оптимизации, поэтому я не продвигаю свое решение дальше в свое время, но, возможно, кто-то еще видел это раньше или пристрастился к оптимизации ... РЕДАКТИРОВАТЬ: пожалуйста, пропустите любые предложения через Тестовый жгут Маркирован ниже . Я более чем немного удивлен, что мое первое подозрение на самом деле подтверждается.
тестовый код, который находится внутри метода JUnit:
Random rng = new Random();
long size = 0;
long[] hold = new long[Long.SIZE];
System.out.println("init:"+Long.toBinaryString(BitTwiddling.bitmask(rng.nextInt(Long.SIZE)))); //initialize BitTwiddling internals
long start = System.currentTimeMillis();
for (int i=0; i
затем сравните base и base2