Java Bitwise- und Shift-Operatoren (mit Beispielen)

In diesem Tutorial lernen wir anhand von Beispielen den bitweisen Operator und verschiedene Arten von Shift-Operatoren in Java kennen.

In Java führen bitweise Operatoren Operationen an ganzzahligen Daten auf der Ebene der einzelnen Bits aus. Hier enthalten die Integer - Daten byte, short, int, und longArten von Daten.

Es gibt 7 Operatoren, die Operationen auf Bitebene in Java ausführen.

Operator Beschreibung
| Bitweises ODER
& Bitweises UND
^ Bitweises XOR
~ Bitweise Ergänzung
<< Linksverschiebung
>> Signierte Rechtsverschiebung
>>> Vorzeichenlose Rechtsverschiebung

1. Java Bitwise OR Operator

Der bitweise ODER- |Operator gibt 1 zurück, wenn mindestens einer der Operanden 1 ist. Andernfalls gibt er 0 zurück.

Die folgende Wahrheitstabelle zeigt die Arbeitsweise des bitweisen ODER-Operators. Sei a und b zwei Operanden, die nur Binärwerte annehmen können, dh 1 oder 0.

ein b a | b
0 0 0
0 1 1
1 0 1
1 1 1

Die obige Tabelle ist als "Wahrheitstabelle" für den bitweisen ODER-Operator bekannt.

Betrachten wir die bitweise ODER-Verknüpfung zweier Ganzzahlen 12 und 25.

 12 = 00001100 (In Binary) 25 = 00011001 (In Binary) Bitwise OR Operation of 12 and 25 00001100 | 00011001 ____________ 00011101 = 29 (In Decimal)

Beispiel 1: Bitweises ODER

 class Main ( public static void main(String() args) ( int number1 = 12, number2 = 25, result; // bitwise OR between 12 and 25 result = number1 | number2; System.out.println(result); // prints 29 ) )

2. Java Bitwise AND Operator

Der bitweise AND- &Operator gibt genau dann 1 zurück, wenn beide Operanden 1 sind. Andernfalls gibt er 0 zurück.

Die folgende Tabelle zeigt die Funktionsweise des bitweisen AND-Operators. A und b seien zwei Operanden, die nur Binärwerte annehmen können, dh 1 und 0.

ein b a & b
0 0 0
0 1 0
1 0 0
1 1 1

Schauen wir uns die bitweise UND-Verknüpfung zweier Ganzzahlen 12 und 25 an.

 12 = 00001100 (In Binary) 25 = 00011001 (In Binary) // Bitwise AND Operation of 12 and 25 00001100 & 00011001 ____________ 00001000 = 8 (In Decimal)

Beispiel 2: Bitweises UND

  class Main ( public static void main(String() args) ( int number1 = 12, number2 = 25, result; // bitwise AND between 12 and 25 result = number1 & number2; System.out.println(result); // prints 8 ) )

3. Java Bitwise XOR Operator

Der bitweise XOR- ^Operator gibt genau dann 1 zurück, wenn einer der Operanden 1 ist. Wenn jedoch beide Operanden 0 sind oder wenn beide 1 sind, ist das Ergebnis 0.

Die folgende Wahrheitstabelle zeigt die Arbeitsweise des bitweisen XOR-Operators. Sei a und b zwei Operanden, die nur Binärwerte annehmen können, dh 1 oder 0.

ein b a & b
0 0 0
0 1 1
1 0 1
1 1 0

Betrachten wir die bitweise XOR-Operation von zwei ganzen Zahlen 12 und 25.

 12 = 00001100 (In Binary) 25 = 00011001 (In Binary) // Bitwise XOR Operation of 12 and 25 00001100 00011001 ____________ 00010101 = 21 (In Decimal)

Beispiel 4: Bitweises XOR

 class Main ( public static void main(String() args) ( int number1 = 12, number2 = 25, result; // bitwise XOR between 12 and 25 result = number1 number2; System.out.println(result); // prints 21 ) )

4. Java Bitwise Complement Operator

Der bitweise Komplementoperator ist ein unärer Operator (funktioniert nur mit einem Operanden). Es wird mit bezeichnet ~.

Es ändert die Binärziffern 1 auf 0 und 0 auf 1 .

Java Bitwise Complement Operator

It is important to note that the bitwise complement of any integer N is equal to - (N + 1). For example,

Consider an integer 35. As per the rule, the bitwise complement of 35 should be -(35 + 1) = -36. Now let's see if we get the correct answer or not.

 35 = 00100011 (In Binary) // using bitwise complement operator ~ 00100011 __________ 11011100

In the above example, we get that the bitwise complement of 00100011 (35) is 11011100. Here, if we convert the result into decimal we get 220.

However, it is important to note that we cannot directly convert the result into decimal and get the desired output. This is because the binary result 11011100 is also equivalent to -36.

To understand this we first need to calculate the binary output of -36.

2's Complement

In binary arithmetic, we can calculate the binary negative of an integer using 2's complement.

1's complement changes 0 to 1 and 1 to 0. And, if we add 1 to the result of the 1's complement, we get the 2's complement of the original number. For example,

 // compute the 2's complement of 36 36 = 00100100 (In Binary) 1's complement = 11011011 2's complement: 11011011 + 1 _________ 11011100

Hier können wir sehen, dass das 2er-Komplement von 36 (dh -36 ) 11011100 ist . Dieser Wert entspricht dem bitweisen Komplement von 35 .

Daher können wir sagen , dass das bitweise Komplement von 35 ist - (35 + 1) = -36 .

Beispiel 3: Bitweise Ergänzung

 class Main ( public static void main(String() args) ( int number = 35, result; // bitwise complement of 35 result = ~number; System.out.println(result); // prints -36 ) )

Java-Shift-Operatoren

In Java gibt es drei Arten von Schichtoperatoren:

  • Signierte Linksverschiebung (<<)
  • Signierte Rechtsverschiebung (>>)
  • Vorzeichenlose Rechtsverschiebung (>>>)

5. Java Left Shift Operator

Der Linksverschiebungsoperator verschiebt alle Bits um eine bestimmte Anzahl spezifizierter Bits nach links. Es wird mit bezeichnet <<.

Java 1 Bit Left Shift Operator

As we can see from the image above, we have a 4-digit number. When we perform a 1 bit left shift operation on it, each individual bit is shifted to the left by 1 bit.

As a result, the left-most bit (most-significant) is discarded and the right-most position(least-significant) remains vacant. This vacancy is filled with 0s.

Example 5: Left Shift Operators

 class Main ( public static void main(String() args) ( int number = 2; // 2 bit left shift operation int result = number << 2; System.out.println(result); // prints 8 ) )

5. Java Signed Right Shift Operator

The signed right shift operator shifts all bits towards the right by a certain number of specified bits. It is denoted by >>.

When we shift any number to the right, the least significant bits (rightmost) are discarded and the most significant position (leftmost) is filled with the sign bit. For example,

 // right shift of 8 8 = 1000 (In Binary) // perform 2 bit right shift 8>> 2: 1000>> 2 = 0010 (equivalent to 2)

Hier führen wir die Rechtsverschiebung von 8 durch (dh das Vorzeichen ist positiv). Daher gibt es kein Vorzeichenbit. Die Bits ganz links werden also mit 0 gefüllt (steht für positives Vorzeichen).

 // right shift of -8 8 = 1000 (In Binary) 1's complement = 0111 2's complement: 0111 + 1 _______ 1000 Signed bit = 1 // perform 2 bit right shift 8>> 2: 1000>> 2 = 1110 (equivalent to -2)

Hier haben wir das vorzeichenbehaftete Bit 1 verwendet , um die Bits ganz links zu füllen.

Beispiel 6: Signierter Rechtsverschiebungsoperator

 class Main ( public static void main(String() args) ( int number1 = 8; int number2 = -8; // 2 bit signed right shift System.out.println(number1>> 2); // prints 2 System.out.println(number2>> 2); // prints -2 ) )

7. Java Unsigned Right Shift Operator

Java bietet auch eine vorzeichenlose Rechtsverschiebung. Es wird mit bezeichnet >>>.

Hier wird die freie Position ganz links mit 0 anstelle des Vorzeichenbits gefüllt . Beispielsweise,

 // unsigned right shift of 8 8 = 1000 8>>> 2 = 0010 // unsigned right shift of -8 -8 = 1000 (see calculation above) -8>>> 2 = 0010

Beispiel 7: Nicht signierte Rechtsverschiebung

 class Main ( public static void main(String() args) ( int number1 = 8; int number2 = -8; // 2 bit signed right shift System.out.println(number1>>> 2); // prints 2 System.out.println(number2>>> 2); // prints 1073741822 ) )

Wie wir sehen können, gibt der vorzeichenbehaftete und vorzeichenlose Rechtsverschiebungsoperator unterschiedliche Ergebnisse für negative Bits zurück. Um mehr zu erfahren, besuchen Sie den Unterschied zwischen >> und >>>.

Interessante Beiträge...