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