битовое вращение в java - разложение long на длинные [] битовые маски

Я раскладываю одиночный 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

5
задан Community 23 May 2017 в 12:11
поделиться