На странице Random :
Метод nextLong реализуется классом Random, как будто by:
public long nextLong() { return ((long)next(32) << 32) + next(32); }
Поскольку класс Случайное использует семя только с 48 бит, этот алгоритм не будет возвращать все возможные длинные значения.
Итак, если вы хотите получить
Long
, вы уже не получите полный диапазон 64 бит.Я бы предположил, что если у вас есть диапазон, который падает рядом с мощностью 2, вы создаете
Long
, как в этом фрагменте, например:next(32) + ((long)nextInt(8) << 3)
, чтобы получить, например, 35-битный диапазон.