Mit Java Bitwise können Sie einzelne Bits nach Belieben ma­ni­pu­lie­ren. Die insgesamt sieben Ope­ra­to­ren sind dabei immer sehr ähnlich aufgebaut und folgen festen Regeln, die leicht zu erlernen sind.

Was sind bitweise Ope­ra­to­ren und wofür werden sie benötigt?

Java-Ope­ra­to­ren sind ein besonders wichtiges Werkzeug in der Arbeit mit der Pro­gram­mier­spra­che. Neben vielen anderen Mög­lich­kei­ten und Funk­tio­nen geben sie Ihnen die Option, die kleinst­mög­li­chen In­for­ma­ti­ons­ein­hei­ten zu ma­ni­pu­lie­ren. Diese Bits (binary digits) haben ein eigenes Zah­len­sys­tem, das auf den Werten 0 und 1 basiert. Wenn Sie nun Bi­när­wer­te Bit für Bit abfragen möchten, benötigen Sie einen Bitwise Operator in Java. Diesen können Sie auf die nu­me­ri­schen Da­ten­ty­pen (byte, char, int, short, long) anwenden.

Zwar werden Sie die Funktion im Alltag nicht täglich benötigen, in einigen Fällen ist die Anwendung aber dennoch sinnvoll. Das gilt zum Beispiel, wenn Sie bei der Kon­ver­tie­rung von Daten Platz sparen wollen, den XOR-Operator verwenden oder eben wirklich nur ein einziges Bit verändern möchten. Außerdem sind sie die Basis für alle höheren schal­tungs­tech­ni­schen Ope­ra­tio­nen. Es lohnt sich also, die grund­sätz­li­che Funk­ti­ons­wei­se von Java Bitwise zu verstehen.

Web­hos­ting
Das beste Web­hos­ting zum Spit­zen­preis
  • 3x schneller und 60 % günstiger
  • Maximale Ver­füg­bar­keit mit > 99.99 %
  • Nur bei IONOS: Bis zu 500 GB Spei­cher­platz inklusive

Welche Java Bitwise Operators gibt es?

Es gibt insgesamt sieben ver­schie­de­ne Bitwise Operators in Java. Zum besseren Ver­ständ­nis gehen wir von den zwei Operanden „a“ und „b“ aus.

  • ~ (Kom­ple­ment oder auch „bitweises Nicht“): Dieser Operator in­ver­tiert jedes Bit. Aus einer 0 wird somit eine 1 und aus einer 1 eine 0.
  • & („bitweises Und“): Dieser Operator gibt eine 1 aus, sofern beide Operanden auch 1 sind. Ist dies nicht der Fall, wird eine 0 aus­ge­ge­ben.
  • | („bitweises Oder“): Dieser Operator pro­du­ziert eine 1, sofern einer der beiden Operanden ebenfalls diesen Wert hat.
  • ^ (XOR oder „bitweises ex­klu­si­ves Oder“): Dieser Operator gibt eine 0 aus, sofern beide Operanden denselben Wert haben. An­dern­falls pro­du­ziert er eine 1.
  • << (Links­ver­schie­bung): Dieser Operator ver­schiebt Operand a um b Po­si­tio­nen nach links. Entstehen dadurch Leer­stel­len, werden diese mit 0 auf­ge­füllt.
  • >> (Rechts­ver­schie­bung mit Vor­zei­chen, arith­me­tisch): Dieser Operator ver­schiebt alle Bits von a um b Po­si­tio­nen nach rechts. Falls das Bit mit dem höchsten Wert auch vor Durch­füh­rung gesetzt war, bleibt es auch danach gesetzt. Negative Zahlen bleiben dadurch negativ.
  • >>> (Rechts­ver­schie­bung ohne Vor­zei­chen, logisch): Dieser Operator schiebt die Bits von a um b Po­si­tio­nen nach rechts. Leer­stel­len werden immer mit 0 auf­ge­füllt.

Bitweises Nicht

Der Java Bitwise Operator „bitweises Nicht“ wird durch eine Tilde (~) dar­ge­stellt. Er negiert alle Bits und macht somit aus Nullen Einsen und aus Einsen Nullen. Für unser Beispiel nehmen wir die Zahl 20. Als Binärzahl sieht diese so aus: 10100. Wenden wir jetzt den Operator an, schaltet dieser jedes Bit der Zahl um. Aus 10100 wird durch den Operator also 01011. Dies ist der Wert des Ausdrucks „~20“. Rechnen wir diese Binärzahl wieder zur De­zi­mal­zahl um, erhalten wir den Wert -21. Wenn Sie diesen Vorgang im Code aus­pro­bie­ren möchten, geben Sie Folgendes ein und erwirken eine Ausgabe mit dem Java-Befehl System.out.println.

public class Main {
	public static void main(String[] args) {
	int Wert1 = 20;
	System.out.println(~Wert1);
}
}
java

Wenn Sie alles richtig ein­ge­ge­ben haben, sollte die Ausgabe nun „-21“ lauten.

Bitweises Und

Das bitweise Und ver­gleicht zwei Zahlen in ihrer binären Form Bit für Bit. Das erste Bit der ersten Zahl wird somit mit dem ersten Bit der zweiten Zahl ab­ge­gli­chen, das zweite mit dem zweiten Bit und so weiter. Wenn beide Bits 1 sind, wird auch eine 1 aus­ge­ge­ben. Ist dies nicht der Fall, da entweder beide Bits oder nur ein Bit 0 ist, wird eine 0 aus­ge­ge­ben. Für unser Beispiel nehmen wir die beiden De­zi­mal­zah­len 18 und 25. 18 als Binärzahl lautet 10010. Die 25 ergibt in binärer Schreib­wei­se 11001. Diese beiden Zahlen ver­glei­chen wir jetzt mit­ein­an­der und ermitteln daraus eine dritte Zahl. Zur besseren Übersicht schreiben wir Sie hier un­ter­ein­an­der:

18 = 10010 25 = 11001

Die beiden ersten Bits sind in beiden Fällen 1. Somit beginnt auch unsere gesuchte Zahl mit 1. Zwar lautet das zweite Bit von 25 ebenfalls 1, das zweite Bit von 18 ist aber 0, weshalb auch die dritte Zahl mit 0 wei­ter­geht. So gehen wir beide Zahlen Bit für Bit durch und erhalten schließ­lich die Binärzahl 10000. Kon­ver­tie­ren wir diese zu einer De­zi­mal­zahl, lautet unsere Ausgabe 16.

Im Code sieht das aus wie folgt:

public class Main {
	public static void main(String[] args) {
	System.out.println(18&25);
}
}
java

Die Ausgabe in der Konsole sollte nun „16“ lauten.

Bitweises Oder

Der Java Bitwise Operator „bitweises Oder“ ver­gleicht ebenfalls zwei Zahlen Bit für Bit. In diesem Fall muss aber nur einer der beiden Operanden den Wert 1 haben, um als Ergebnis 1 zu erhalten. Nehmen wir wieder die 18 und 25 vom vor­he­ri­gen Beispiel, sieht das so aus:

18 = 10010 25 = 11001

Da außer der dritten Stelle alle Bits min­des­tens eine 1 enthalten, ergibt sich diese dritte Zahl: 11011. Um­ge­rech­net erhalten wir also die 27.

So sieht dieses Beispiel im Code aus:

public class Main {
	public static void main(String[] args) {
	System.out.println(18|25);
}
}
java

XOR

XOR oder auch „bitweise ex­klu­si­ves Oder“ (^) ähnelt dem bitweisen Oder. Während aber bei diesem wahlweise einer oder beide Operanden 1 sein müssen, gibt XOR nur dann eine 1 aus, wenn genau einer der beiden Werte auch 1 ist. Ver­ständ­lich wird das bei einem Blick auf unser Beispiel:

18 = 10010 25 = 11001

Die ersten beiden Bits haben den Wert 1, ergeben also bei diesem Bitwise Operator in Java 0. Das zweite Bit von 18 ist 0, das von 25 aber 1. Daraus ergibt sich der Wert 1. Gehen wir weiter durch, erhalten wir die dritte Zahl 01011. In De­zi­mal­form lautet diese 11.

Dies ist der passende Code:

public class Main {
	public static void main(String[] args) {
	System.out.println(18^25);
}
}
java

Links­ver­schie­bung

Bei der Links­ver­schie­bung ver­schie­ben Sie die Bits des Wertes a um die Distanz b nach links. Die daraus ent­ste­hen­den Leer­stel­len werden mit 0 auf­ge­füllt. Dies lässt sich gut an einem int-Wert ver­an­schau­li­chen, der in einem Speicher 32 Bit belegt. Nehmen wir als Zahl a wieder die 20 bzw. 10010. Ver­schie­ben wir diese um den b-Wert 2, erhalten wir den c-Wert 1001000. Es werden also zwei Nullen an das Ende gesetzt. 1001000 ent­spricht dem De­zi­mal­wert 72.

So sieht dieser Vorgang im Code aus:

public class Main {
	public static void main(String[] args) {
	int a = 20;
	int b = 2;
	int c = (a << b);
	System.out.println(c);
}
}
java

Rechts­ver­schie­bung mit Vor­zei­chen

Die Rechts­ver­schie­bung funk­tio­niert genau an­ders­her­um. Wir schieben die Bits des a-Wertes also um den Wert b nach rechts und erhalten so c. Die letzten Bits fallen dadurch weg. Wenn wir in unserem Beispiel die 20 oder 10010 um zwei Stellen nach rechts rücken, erhalten wir als Ergebnis 100 oder 4.

Dies ist der Code zum Aus­pro­bie­ren:

public class Main {
	public static void main(String[] args) {
	System.out.println(20 >> 2);
}
}
java

Wichtig ist hierbei zu beachten, dass die Leer­stel­len mit 0 auf­ge­füllt werden, sofern a eine positive Zahl ist. Ist sie negativ, werden die Leer­stel­len mit 1 ersetzt.

Rechts­ver­schie­bung ohne Vor­zei­chen

Der Java Bitewise Operator Rechts­ver­schie­bung ohne Vor­zei­chen (>>>) funk­tio­niert im Prinzip genauso. Der einzige Un­ter­schied ist, dass die Leer­stel­len, die auf der linken Seite durch eine Ver­schie­bung nach rechts entstehen, immer mit 0 auf­ge­füllt werden. Dadurch entstehen am Ende immer positive Zahlen, selbst wenn der Wert vorher negativ war. 63918bf29b2b49202e1815d2336b7f74

Zum Hauptmenü