Обновить

Комментарии 5

calculateShift можно ускорить.
Вот тут несколько способов как это сделать.

Не считая банальной замены двух сравнений на сравнение с минимумом двух параметров.
Спасибо вам за ссылку! Попробую копнуть в этом направлении.

Как-то так:
protected static int calculateShift(int minimumValue, int maximumValue) {
  int target = Math.min(minimumValue, maximumValue);	
  if (target > 1)
    return Integer.highestOneBit(target - 1) << 1;
  else
    return 1;
}
У вас возвращается старший бит, оригинальный метод возвращает его позицию.

Например для 7 вы вернете 8, а надо 3.

Правильная реализация будет выглядеть примерно так.

int calculateShift(int minimumValue, int maximumValue) {
  int target = Math.min(minimumValue, maximumValue);	
  return 32-Integer.numberOfLeadingZeros(target);
}

Да, действительно. Тогда вот так (а если ни один из аргументов не может быть нулем, то еще проще):

    protected static int calculateShift(int minimumValue, int maximumValue)
    {
        int target = Math.min(minimumValue, maximumValue);
        if (target > 0)
            return 32 - Integer.numberOfLeadingZeros(target - 1);
        else
            return 0;
    }
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Минуточку внимания