Random.nextInt(int)

Franz Degenhardt

Erfahrenes Mitglied
Hallo!

nextInt(int) ist in java 1.4.2 folgendermassen implementiert:
Code:
    public int nextInt(int n) {
        if (n<=0)
            throw new IllegalArgumentException("n must be positive");

        if ((n & -n) == n)  // i.e., n is a power of 2
            return (int)((n * (long)next(31)) >> 31);

        int bits, val;
        do {
            bits = next(31);
            val = bits % n;
        } while(bits - val + (n-1) < 0);
        return val;
    }
Irdendwie kamen mir da Zweifel am Sinn der Implentierung. Ist der Ausdruck
(n & -n) == n nicht immer wahr für positive n?
Und wenn ja, wieso ist die Methode danach nicht zuende. Hat dafür jemand eine Erklärung?

Grüsse TrueSun
 
Hmm

Ich kann mich noch dunkel erinnern, dass minus durch eine 1 im Vorzeichenbit dargestellt wird.
5 wäre also binär:
0 ...00101
-5 binär:
1...00101

a b a&b
1 1 1
1 0 0
0 1 0
0 0 0

dann ist (5 & -5) = 5 damit wäre die Bedingung erfüllt, obwohl 5 keine Potenz von 2 ist.

Wo ist mein Fehler?
 
Zurück