2012-11-14 30 views
6

Mögliche Duplizieren:
What does >> and >>> mean in Java?Was bedeutet << or > >> in Java?

ich auf einige unbekannte Symbole in eine Reihe von Java-Code lief, und während der Code korrekt und Funktionen kompiliert, ich bin verwirrt, was genau den spitzen Klammern tun in diesem Code. Ich fand den Code in com.sun.java.help.search.BitBuffer, ein Fragment davon ist unten:

public void append(int source, int kBits) 
    { 
     if (kBits < _avail) 
     { 
      _word = (_word << kBits) | source; 
      _avail -= kBits; 
     } 
     else if (kBits > _avail) 
     { 
      int leftover = kBits - _avail; 
      store((_word << _avail) | (source >>> leftover)); 
      _word = source; 
      _avail = NBits - leftover; 
     } 
     else 
     { 
      store((_word << kBits) | source); 
      _word = 0; 
      _avail = NBits; 
     } 
    } 

Was tun diese mysteriösen suchen Klammern? Es fast sieht aus wie C++ -Einfügung/Extraktion, aber ich weiß, dass Java nichts dergleichen hat.

Auch habe ich versucht, es zu googeln, aber aus irgendeinem Grund scheint Google nicht die spitzen Klammern zu sehen, auch wenn ich sie in Anführungszeichen setzen.

+3

Sie sind Bit-Shift-Operatoren, lesen Sie es [hier] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html) und ausführlicher [hier] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html) – jlordo

+0

Nur hinzufügen, >>> richtige Verschiebung von Bits bedeutet, die Nummer durch keine Bit-Verschiebungen auf die erhöht Potenz von 2 und << Linksverschiebung von Bits bedeutet Multiplikation der Zahl mit Nein von Bitverschiebungen, die auf die Potenz von 2 angehoben werden. –

Antwort

20

Sie sind bitweise Bit-Shift-Operatoren, sie arbeiten durch Verschieben der Anzahl der Bits, die angegeben werden. Hier ist tutorial auf, wie man sie benutzt.

Die unterzeichnete linke Shift-Operator „< <“ verschiebt ein Bitmuster nach links

Die rechte Shift-Operator unterzeichnet „>>“ verschiebt sich nach rechts ein Bitmuster.

Der unsigned rechte Shift-Operator ">>>" verschiebt eine Null in die linke Position

+0

Der Code verwendet auch '>>>', was eine vorzeichenlose Rechtsverschiebung ist. – TheZ

+0

@TheZ: Danke! Aktualisierte Antwort mit verwandtem Text. – kosa

4

direkt aus ORACLE DOC.

Die unterzeichnete linke Shift-Operator „< <“ verschiebt sich nach links ein Bitmuster, und die rechte Shift-Operator unterzeichnet „>>“ verschiebt ein Bitmuster zum rechts. Das Bitmuster wird durch den linken Operanden und die Anzahl der zu verschiebenden Positionen durch den rechten Operanden angegeben. Der vorzeichenlose Rechtsschiebeoperator ">>>" verschiebt eine Null in die äußerste linke Position, , während die äußerste linke Position nach ">>" von der Vorzeichenerweiterung abhängt.