Bitweise UND

Maddimini

Mitglied
Hallo :),

Ich wünsche euch ein frohes neues Jahr ;)

Beim Erarbeiten des Quellcodes der Random Klasse fiel mir dieser Codebereich auf:
http://www.docjar.com/html/api/java/util/Random.java.html

Code:
public int nextInt(int n) {
if ( n>0) {
    if(n & -n) == n) {       
        return (int) ((n * (long) next(31)) >> 31);
...


Warum wird hier gefragt, ob eine bitweise UND Verknüpfung dem normalen Wert entspricht?

zB: 10 im 2-System: 1010
minus 10 => 11 ?! [ Erst invertieren und dann 1 dazu addieren ?! ]
1010 & 11 =>00010 = 10 = 2
:(
 
Wenn kein Denkfehler drin ist, ist
(n&(-n))==n
das Gleiche wie
n>=0

Aber wer schreibt das so komisch?
Stammt das von einen Decompiler (anders kann ich mir das nicht erklären)?
 
Zurück