Я пытаюсь понять, как java.util.Random.nextInt (int n) работает и, несмотря на все поиски и даже отладки, не может полностью понять реализацию.Сложная реализация java.util.Random nextInt (int n)
Это в то время как цикл, который вызывает путаницу: http://docs.oracle.com/javase/7/docs/api/java/util/Random.html#nextInt(int)
int bits, val;
do {
bits = next(31);
val = bits % n;
} while (bits - val + (n-1) < 0);
Я понимаю, что это, как предполагается рассмотреть смещение по модулю, но изо всех сил, чтобы увидеть, как.
Вопрос: как может возможно выражение
bits - val + (n-1)
быть отрицательным при условии, что биты значение 31 бит длиной, то есть биты всегда положительна? Если биты положительна, вал всегда меньше, чем биты затем в то время как состояние всегда остается> 0 ...
Если он переполнен. – user2357112
Контракт 'next (int n)' говорит, что младшие разряды 'n' будут приблизительно случайными. Он не делает никаких утверждений о битах высокого порядка. Высокий бит может быть '0' или' 1'. Когда это '1', значение' bits' отрицательно. –