web-dev-qa-db-ger.com

Java "Bit Shifting" Tutorial?

Ich wäre dankbar für ein gutes Tutorial, das Java Neulingen erklärt, wie in Java das ganze "bit shifting" funktioniert.

Ich stolpere immer darüber, habe aber nie verstanden, wie es funktioniert. Es sollte alle Operationen und Konzepte erläutern, die mit byteshifting/bitmanipulation in Java möglich sind.

Dies ist nur ein Beispiel, was ich meine (aber ich suche ein Tutorial, das jede mögliche Operation erklärt):

byte b = (byte)(l >> (8 - i << 3));
46
Markus

Nun, das offizielle Tutorial Java Bitwise and Bit Shift Operators behandelt die tatsächlichen Operationen, die in Java verfügbar sind, und wie man sie aufruft.

Wenn Sie sich fragen, was ich mit Bit-Shifting tun kann, ist dies nicht Java spezifisch, und da es sich um eine einfache Technik handelt, sind mir keine "coolen Dinge" bekannt, die Sie tun können an sich. Es lohnt sich, sich mit den Definitionen vertraut zu machen und nach anderen Codes Ausschau zu halten, um zu sehen, was sie getan haben.

Beachten Sie, dass Bit-Twiddling oft ein Effizienzgewinn auf Kosten der Klarheit ist. Zum Beispiel ist a << 1 Normalerweise dasselbe wie a * 2, Aber wohl weniger klar. Wiederholte XORs können zwei Zahlen ohne Verwendung einer temporären Variablen vertauschen, aber es wird allgemein als bessere Form angesehen, den Code klarer mit der temporären Variablen (oder sogar besser) zu schreiben , in einer Utility-Methode). In dieser Hinsicht ist es schwierig, gute Beispiele zu nennen, da Sie auf Architekturebene wahrscheinlich nichts Neues oder Tiefgreifendes erreichen werden. Alles dreht sich um die Details auf niedriger Ebene. (Und ich würde schätzen, dass eine große Anzahl von Verwendungen von Bit-Twiddling "in the wild" Beispiele für vorzeitige Optimierung sind.)

34
Andrzej Doyle

Es gibt unendlich viele Kombinationsmöglichkeiten. Sie bestehen jedoch aus einer oder mehreren Kombinationen von

>> shift right with sign extension.
>>> shift right with out sign extension.
<< shift left.

Zum Verständnis schlage ich vor, die Binärzahlen auf Papier zu schreiben und herauszufinden, was passiert. Der Versuch, es in einem Tutorial zu lesen, garantiert kein Verständnis. Vor allem, wenn sie bisher nicht geholfen haben.

13
Peter Lawrey

Es gibt ein einfaches aber klares Tutorial, das ich nützlich finde hier

9
msb

Hier sind die Einzelheiten zur Bitverschiebung . Es gibt einige nicht intuitive Verhaltensweisen, die im offiziellen Lernprogramm nicht behandelt werden. Zum Beispiel hat der rechte Operand einen begrenzten Bereich (0-31 für int, 0-63 für long) und gibt keine Warnung aus, wenn Sie diesen Bereich überschreiten - er schneidet nur die Bits ab (dh% 32 oder% 64) ), was zu einem anderen Verhalten führen kann, als Sie erwarten.

5
adam.r

Es ist nicht gerade ein Tutorial, aber ich habe eine persönliche Bibliothek von Bit-Shifting-Funktionen in Java, die Sie gerne studieren!

Auch wenn Sie eine Google-Suche nach "bitweise Tricks" durchführen, werden Sie eine Menge Material finden. Viele davon befinden sich in C/C++, sind jedoch im Allgemeinen einfach in Java zu konvertieren, da der größte Teil der Syntax identisch ist.

5
mikera

Diese Seite scheint ein ziemlich gutes Tutorial zu geben, was Sie mit Bit-Manipulation machen können (also nicht spezifisch für Java aber da es ziemlich einfach zu übersetzen ist)

http://www.bogotobogo.com/cplusplus/quiz_bit_manipulation.html

Das Tutorial oben bietet

  • Bitweise Operationen
  • Bit setzen und löschen
  • Anzeigen einer Ganzzahl mit Bits
  • Umwandlung von Dezimal in Hex
  • Die Anzahl der Bits in einer Ganzzahl (Anzahl der Einsen)
  • Die gesetzte Bitposition einer Ganzzahl
  • In-Place-Integer-Swap mit Bit-Manipulation
  • Die Anzahl der Bits, die erforderlich sind, um eine Ganzzahl A in eine Ganzzahl B umzuwandeln
  • Tausche ungerade und gerade Bits in einer ganzen Zahl
  • Was (n & (n-1) == 0) prüft?
  • Komplement für zwei
  • Fliping n-ten Bit einer ganzen Zahl
  • Fließkommazahl-Bitmuster
  • Bitmusterpalindrom einer ganzen Zahl

Hier ist eine Datei mit einer Reihe von Java Implementierungen

http://geekviewpoint.com/

3
i8abug

Dies sind zwei gute Tutorials, die ich beim Erlernen der Bitverschiebung gefunden habe. Sie sind nicht in Java) enthalten, aber die meisten Sprachen verwenden dieselben Operatoren und die Theorie ist dieselbe.

  1. Bit Twiddling
  2. PHP Bitwise Tutorial von Jim Plush
2
mike