Heim >Java >javaLernprogramm >Einführung in Java-Bitoperationen (Codebeispiel)

Einführung in Java-Bitoperationen (Codebeispiel)

不言
不言nach vorne
2019-03-07 17:38:162519Durchsuche

Der Inhalt dieses Artikels ist eine Einführung in Java-Bit-Operationen (Codebeispiele). Ich hoffe, dass er für Freunde hilfreich ist.

Wir alle wissen, dass in der Computerwelt, egal wie komplex oder schön das Programm ist, es am Ende zu Nullen und Einsen wird. Das nennen wir oft: binär. Ich glaube, jeder kennt Binärdateien. Der Unterschied zur realen Welt besteht darin, dass wir in der realen Welt normalerweise Dezimalzahlen verwenden, um dies auszudrücken. Das heißt, wenn wir auf zehn zu eins stoßen, sind uns diese alle vertraut. An dieser Stelle werden wir Hinweise darauf finden, dass die Maßeinheiten der Dezimalzahl in der realen Welt und der Binärzahl in Computern unterschiedlich sind. Wie kann man also zwischen ihnen konvertieren? Hierzu sind einige relativ grundlegende Computerkenntnisse erforderlich. Wird in diesem Artikel nicht behandelt (wenn Sie interessiert sind, können Sie beim nächsten Mal darüber sprechen). Nun, zurück zum heutigen Thema, sprechen wir über Bit-Operationen. Was ist das für ein Konzept? Wir sind seit unserer Kindheit mit den Operationen Addition, Subtraktion, Multiplikation und Division in der realen Welt vertraut, bei denen es sich um Operationen im Dezimalsystem handelt. Worüber wir heute sprechen werden, sind einige gängige Operationen in Binärbits. Zum Beispiel: & (bitweises UND), |. (bitweises ODER), ^ (exklusives ODER), <<(Linksverschiebung), >>(Rechtsverschiebung) usw.

Wahr und Falsch
Bevor wir Operatoren verwenden, müssen wir über wahr und falsch sprechen. In Java wissen wir alle, dass der Wert true für wahr und der Wert false für falsch steht. Tatsächlich wird in Computern normalerweise 1 zur Darstellung von „wahr“ und 0 zur Darstellung von „falsch“ verwendet. Schüler, die Json verwendet haben, sollten wissen, dass der boolesche Typ in Java auch mit 1 in „true“ deserialisiert werden kann und 0 in „false“ deserialisiert werden kann.

& (Bitweises UND)
Bevor wir über bitweises UND sprechen, sprechen wir zunächst über die bekannte && logische UND-Verknüpfung. Vereinfacht ausgedrückt bedeutet A&&B: Es ist wahr, wenn A und B beide wahr sind, andernfalls ist es falsch. Manche nennen es auch: „Wenn eine Lüge einmal falsch ist, muss sie auch falsch sein.“

Jetzt schauen wir uns Position und an. Schauen wir uns zunächst ein Programm an:

@Test

public void testBit(){
    int a = 8;
    int b = 9;
    System.out.println("a binary: "+Integer.toBinaryString(a));
    System.out.println("b binary: "+Integer.toBinaryString(b));
    System.out.println("a & b binary: "+Integer.toBinaryString(a&b));
    System.out.println("a & b result: "+(a&b));
}

Bevor wir uns die Erklärung ansehen, raten wir mal, was das Ergebnis ist?

Code-Erklärung:

Bit UND: Wir verstehen es wörtlich, es ist auch eine UND-Verknüpfung von binären Bits.

Die Dezimalschreibweise der Zahl 8 ist: 1000.

Die Dezimalform der Zahl 9 ist: 1001.

Führen wir den Standortvorgang noch einmal durch:

wie folgt:

8: 1000
9: 1001
&
8 1000

Die 1&1 ganz links = 1, die mittlere 0&0 = 0 und die 0&1 ganz rechts = 0.

Das binäre Ergebnis ist: 1000, was nach der Konvertierung in eine Dezimalzahl 8 ist.

Das Ergebnis der Programmausführung ist wie folgt:

a binär: 1000
b binär: 1001
a & b binär: 1000
a & b Ergebnis: 8

Die Ergebnisse sind wie erwartet.

|. (Bit-Oder)

Die oben erwähnte & (Bit-Und)-Operation, schauen wir uns nun die Bit-Oder-Operation an und verwenden sie weiter das obige Beispiel: wie unten gezeigt:

@Test

public void testBit(){
    int a = 8;
    int b = 9;
    System.out.println("a binary: "+Integer.toBinaryString(a));
    System.out.println("b binary: "+Integer.toBinaryString(b));
    System.out.println("a & b binary: "+Integer.toBinaryString(a|b));
    System.out.println("a & b result: "+(a|b));
}

Sehen Sie sich die Binärdatei noch einmal an:

8: 1000
9: 1001
|
9 1001
Ganz links Die 1|1 = 1, die Mitte 0|0 = 0 und die ganz rechte 0|1 = 1.

Das Binärsystem des Ergebnisses ist: 1001 und das entsprechende Dezimalsystem ist 9.

Das Operationsergebnis ist wie folgt:

a binär: 1000
b binär: 1001
a & b binär: 1001
a & b Ergebnis: 9

^(XOR)

Dieser Operator ist interessanter. X bedeutet wörtlich: anders. Das Gleiche gilt für Platzierungsvorgänge. Fahren Sie mit dem obigen Beispiel fort:

@Test

public void testBit(){
    int a = 8;
    int b = 9;
    System.out.println("a binary: "+Integer.toBinaryString(a));
    System.out.println("b binary: "+Integer.toBinaryString(b));
    System.out.println("a & b binary: "+Integer.toBinaryString(a^b));
    System.out.println("a & b result: "+(a^b));
}

Betrachten Sie weiterhin die Binärdatei:

8:1000
9:1001
^
1 0001

Wenn die Bits gleich sind, ist es falsch, wenn sie unterschiedlich sind, ist es wahr. Die 1=1 auf der linken Seite ist dasselbe wie falsch, also 0. Die 0=0 in der Mitte ist ebenfalls falsch und 0. Die 0 ganz rechts ist nicht gleich 1, was wahr ist. Das Ergebnis ist 1.

<<(Nach links verschieben)

In der realen Welt verwenden wir oft Multiplikation. << bedeutet eine binäre Verschiebungsoperation, bei der die unteren Bits mit Nullen gefüllt sind. Beispiel: 8<<1.

@Test

public void testCode(){
    int a =8;
    System.out.println("a toBinaryString: "+Integer.toBinaryString(a));
    System.out.println("a<<1 toBinaryString: "+Integer.toBinaryString(a<<1));
    System.out.println("result: "+(a<<1));

Die Binärdatei lautet wie folgt:

8 1000
8<<1
16 10000

Das Ergebnis ist: 2^ 4 = 16. << Das a auf der linken Seite stellt die Basis dar und die 1 auf der rechten Seite stellt die Anzahl der Bits dar, die verschoben werden müssen. Egal in welche Richtung der Pfeil zeigt, dorthin wird die Verschiebung gehen. Ergebnis der Programmausführung:

a toBiryString: 1000
a<<1 toBinaryString: 10000
Ergebnis: 16

>> Nach rechts verschieben

(Rechtsverschiebung) ist das Gegenteil von Linksverschiebung <<, die High-Bits werden mit 0 gefüllt. Weiter mit dem obigen Beispiel:

@Test

public void testCode(){
    int a =8;
    System.out.println("a toBinaryString: "+Integer.toBinaryString(a));
    System.out.println("1>>a toBinaryString: "+Integer.toBinaryString(a>>1));
    System.out.println("result: "+(a>>1)
}

Binär:

8 : 1000
8>>1
4 : 0100

Ergebnis ausführen:

a toBinaryString: 1000
a>>1 toBinaryString: 100
Ergebnis: 4

Tatsächlich gibt es eine Formel dafür leichter zu merken. :

a>>n bedeutet: a / (2^n) Potenz. (Rundung)

a<

Jetzt machen wir eine kurze Berechnung:

Wenn a = 13, n = 2. 13<<2 ist gleich 13* 4 = 52. 13/4 = 3.

(Wenn es Fehler im oben genannten Geschwindigkeitsalgorithmus gibt, können Sie mir gerne eine Ohrfeige geben!!!)


Bitweise Verschiebungsoperationen sind in unserem Quellcode und in gängigen Algorithmen weit verbreitet. Außerdem ist es für einen Java-Programmierer erforderlich, bitweise Operationen zu beherrschen. Dies ist sehr hilfreich für unser Algorithmus- und Quellcode-Verständnis!


Das obige ist der detaillierte Inhalt vonEinführung in Java-Bitoperationen (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen