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:


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


Quelle: java.util: Random.java

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
 
S

SlaterB

Gast
binär 11 ist offensichtlich 3, also nicht -10, so einfach gehts nicht

bei mir steht
Java:
       if ((n & -n) == n)  // i.e., n is a power of 2
            return (int)((n * (long)next(31)) >> 31);
da hast du den Hinweis

dazu noch
Java:
        System.out.println(Integer.toBinaryString(32));
        System.out.println(Integer.toBinaryString(-32));
bzw. schaue dir von verschiedenen Zahlen (1 - 32) die positive und vor allem die negative Darstellung an
 
S

SlaterB

Gast
? um die Frage ging es doch bisher, der Test dient dem Erkennen von Potenzen von 2

oder ist deine Frage warum sich die Methode nun für diese Zahlen gesondert interessiert?
das dürfte auch bei dir bzw. in der allgemeinen API im Kommentar der Methode nachzulesen sein

edit:
in der Kurzfassung
java.util: Random.java
steht tatsächlich wenig, schaue in der normalen API
 

Landei

Top Contributor
Wenn dir solcher "Experten-Code" (und ich schreibe das bewußt in Anführungszeichen) begegnet, schaust du am einfachsten hier nach, was das bedeuten soll: Bit Twiddling Hacks

Ich sage mal in 90% der Fälle wirst du da fündig.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Bitweise Operatoren Allgemeine Java-Themen 11

Ähnliche Java Themen

Neue Themen


Oben