02.05.02 „Fortgeschrittene“ Operatoren
Nachdem Sie bereits die einfachsten Operatoren in Java kennengelernt haben, befasst sich dieses Kapitel mit den weiteren Operatoren. Dieser Beitrag ist für Anfänger nicht zwingend notwendig, so dass er ohne Probleme übersprungen und erst zu einem späteren Zeitpunkt bei Bedarf studiert werden kann.
Zu Beginn dieses Kapitels stelle ich Ihnen den Modulo-Operator vor. Dieser wird in Java durch das Prozent-Zeichen (%
) dargestellt. Modulo dividiert zwei Werte und gibt den Rest zurück.
int rest = 21 % 3; // 0 rest = 25 % 10; // 5
Bei fortgeschrittener Programmierung ist es manchmal notwendig/effizienter Werte bitweise zu manipulieren. Hierzu bietet Java u. a. die Operatoren <<
(Shift links), >>
(Shift rechts mit Vorzeichenerweiterung) und >>>
(Shift rechts ohne Vorzeichenerweiterung). Durch ein Shift links werden die Bits weiter nach links, und durch ein Shift rechts nach rechts verschoben. Nehmen wir z. B. die Zahl 9. Diese entspricht im Dualsystem der 1001. Verschieben wir die Bits jetzt um eine Stelle nach rechts, so wird aus 1001 die 100, also die Zahl 4. Verschieben wir sie hingegen um zwei Stellen nach links, so wird aus der 1001 die 100100, also die Zahl 36.
int i = 9;
System.out.println(i >> 1); // 4
System.out.println(i >> 2); // 36
Mit einem Shift nach links können Sie bspw. eine Multiplikation mit 2 erreichen:
int x = 5;
System.out.println("Shift links: " + (x << 1));
System.out.println("Multiplikation mit zwei: " + (x * 2));
Bzw. eine Multiplikation mit 2 hoch n
:
int x = 621;
int n = 3;
System.out.println("Shift links: " + (x << n));
System.out.println("Multiplikation mit zwei: " + (x * Math.pow(2, n)));
Der Aufruf
Math.pow(2, n)
gibt das Ergebnis von 2 hochn
aus.
Ein weiterer Operator zur Bit-Bearbeitung von Werten ist das bitweise Komplement (~
). Wie der Name schon sagt, wird dabei jedes einzelne Bit umgekehrt – aus einer 0 wird eine 1 und aus einer 1 wird eine 0. Zur Veranschaulichung dient ein Byte mit dem Wert 92, was 01011100 entspricht. Das bitweise Komplement hiervon sieht folglich so aus 10100011 und entspricht der Zahl -93, da das erste Bit für das Vorzeichen steht.
byte b = 92; System.out.println(b); System.out.println(~b);
Java bietet aber auch Und-, Oder– und XOR-Verknüpfungen. Die dazugehörigen Zeichen haben Sie schon im vorhergehenden Kapitel kennengelernt, mit dem Unterschied dass kein logisches „und“ (&&
) und „oder“ (||
) verwendet werden darf, sondern lediglich das bitweise „und“ (&
) und „oder“ (|
). Ein Beispiel:
Gegeben sind die beiden Zahlen 13 (01101) und 27 (11011). Werden diese beiden Zahlen miteinander verknüpft, so wird jedes Bit der 13 mit jedem Bit der 27 verglichen. Bei einer Und-Verknüpfung würde als Ergebnis also eine binäre Zahl zurückgegeben werden, die an jeder Stelle eine 1 hat, an der auch die 13 und die 27 eine 1 haben => 01001 => 9. Durch die Oder-Verknüpfung erhält das Ergebnis an jeder Stelle eine 1, an der die 13 oder die 27 eine 1 haben => 11111 => 31. Die XOR-Verknüpfung sorgt dafür, dass das Ergebnis überall dort eine 1 erhält, wo die 13 und die 27 unterschiedliche Werte aufweisen => 10110 => 22.
System.out.println(13 & 27); // 9
System.out.println(13 | 27); // 31
System.out.println(13 ^ 27); // 22
Der letzte Operator in Java ist das logische Komplement (!
) oder auch die Negierung. Dadurch wird ein boolscher Wert negiert => aus true
wird false
und umgekehrt.
boolean wahr = !false;
boolean falsch = !wahr;
System.out.println(wahr); // true
System.out.println(falsch); // false
System.out.println("1 ist nicht größer als 2? " + !(1 > 2)); // true
Wann wird der instanceof-Operator besprochen?
Hallo „user unknown“,
instanceof
wird im Vererbungskapitel unter 04. Objekt Orientierte Programmierung besprochen. Aller Voraussicht nach wirst du dieses Kapitel in ca. 1-3 Wochen unter diesem Link aufrufen können.Gruß
Stefan