Vorrang des Operators – 1

„Hallo, Bilaabo!“

„Bilaabo freut sich, seinen Freund zu begrüßen!“

„Heute wird Bilaabo Ihnen etwas über den Vorrang der Betreiber erzählen. Aber zuerst wird er Ihnen etwas über die Betreiber selbst erzählen.“

„Von welchen Operatoren sprechen Sie?“

„Eigentlich kennen Sie sie bereits. Vielleicht wussten Sie nur nicht, dass sie Operatoren heißen.“

„Angenommen, wir haben den Ausdruck  c = a + b;

„Es gibt zwei Operatoren: einen Additionsoperator und einen Zuweisungsoperator.“

„Mit anderen Worten, Operatoren sind nur mathematische Zeichen? Wie Multiplikation, Division und Addition?“

„Ja, das stimmt. Allerdings gibt es Unterschiede.“

„Ich werde keine Operatoren für Sie definieren: Eine Definition macht Sie nicht schlauer. Es ist besser, sie in Aktion zu sehen. Operatoren können in mehrere Gruppen unterteilt werden, die wir jetzt untersuchen.“

1)Mathematische Operatoren

Symbol Beispiel Name Beschreibung (was es tut)
+ a + b Additionsoperator Additionsoperator.
- c - d Subtraktionsoperator Subtrahiert die zweite Zahl von der ersten.
* a * t Multiplikationsoperator Multipliziert zwei Zahlen.
/ a / b Divisionsbetreiber Dividiert die erste Zahl durch die zweite.
% c % d Dividiert die erste Zahl durch die zweite. Berechnet den Rest nach Division der ersten Zahl durch die zweite.
- -a Unäres Minus Ändert das Vorzeichen der Variablen in das Gegenteil.
Plus zu Minus und Minus zu Plus.
+ +a Unäres Plus Ändert nichts. Dies wurde hinzugefügt, um den unären Minusoperator zu ergänzen. Es geht nur ums Aussehen.

„Diese kenne ich aus der Schule. Meine Firmware beinhaltet Schulkurse.“

„Aber was ist mit diesem Prozentzeichen, einer Art Zauberei?“

„Es ist der Operator „ Rest nach Division “. Wenn 11 durch 5 dividiert wird, erhalten wir 2 und einen Rest von 1. Diese 1 erhält man, indem man 11 % 5; schreibt.“

„Wenn man in Java ganze Zahlen dividiert, ist das Ergebnis ebenfalls eine ganze Zahl. Der Rest der Divisionsoperation wird einfach ignoriert. Wenn wir 8 durch 5 dividieren, erhalten wir 1.“

Ausdruck Ergebnis
19 / 10 1 Wenn wir 19 durch 10 dividieren, ist das Ergebnis 1 mit einem Rest von 9.
19 % 10 9 Wenn wir 19 durch 10 dividieren, ist das Ergebnis 1 mit einem Rest von 9.
2 / 5 0 Wenn wir 2 durch 5 dividieren, ist das  Ergebnis 0 mit einem Rest von 2.
16 % 2 0 Wenn wir 16 durch 2 dividieren, ist das Ergebnis 8 mit einem Rest von 0.

„Aber wofür in aller Welt brauchen wir den Rest?“

„Angenommen, Sie müssen prüfen, ob eine ganze Zahl gerade ist. Dann können Sie schreiben:“

if (a % 2 == 0)

„Und wenn Sie überprüfen müssen, ob b ungerade ist, können Sie schreiben:“

if (b % 2 == 1)

„Oder um zu prüfen, ob d durch 3 teilbar ist:“

if (d % 3 == 0)

„Interessant. Das werde ich mir merken.“

2) Vergleichsoperatoren

Symbol Beispiel Name Beschreibung (was es tut)
< a < b Weniger als Überprüft, ob a kleiner als b ist.
<= c <= d Gleich oder kleiner als Überprüft, ob c kleiner oder gleich d ist.
> a > b Größer als Überprüft, ob a größer als b ist.
>= c >= d Größer als oder gleich wie Überprüft, ob c größer oder gleich d ist.
== i == j gleicht Überprüft, ob i gleich j ist.
!= a != 0 Nicht gleichzusetzen mit Überprüft, ob a ungleich Null ist.

„Ich nutze das alles schon.“

„Und was ist der Hauptunterschied zwischen diesen Operatoren und den mathematischen Operatoren?“

„Wenn wir zwei Zahlen addieren, erhalten wir eine Zahl; wenn wir jedoch zwei Zahlen vergleichen, erhalten wir wahr oder falsch.“

„Das ist richtig. Das Ergebnis eines Vergleichs ist ein „ logischer Wert “, der, wie Sie wissen, durch den booleschen Typ dargestellt wird. Es gibt zwei Möglichkeiten: wahr oder falsch.

„Ja, das ist alles klar. Das weiß ich schon.“

3)Logische Operatoren

Symbol Beispiel Name Beschreibung (was es tut)
&& a && b UND Das Ergebnis des Ausdrucks ist nur dann wahr, wenn sowohl a als auch b wahr sind.
|| c || d ODER Das Ergebnis des Ausdrucks ist wahr, wenn entweder a oder b wahr ist. Beide oder zumindest einer.
! !a NICHT Das Ergebnis des Ausdrucks ist nur wahr, wenn a falsch ist.

„Logische Operatoren können nur mit booleschen Variablen oder Ausdrücken verwendet werden.“

Beispiel Beschreibung
boolean a = true;
boolean b = true;if (a && b)
Die if-Bedingung ist wahr, wenn beide Werte wahr sind.
Mit anderen Worten, wenn sowohl a als auch b wahr sind, dann ist das Ergebnis wahr .
boolean a = true;
boolean b = false;if (a || b)
Die if-Bedingung ist wahr, wenn mindestens ein Wert wahr ist.
Mit anderen Worten, wenn entweder a oder b wahr ist, dann ist das Ergebnis wahr .
boolean b = false;

if (!b)

Die if-Bedingung ist wahr, wenn b nicht wahr ist.
Mit anderen Worten: Wenn   b false ist , ist das Ergebnis  true .
int a = 2, b = 3, c = 4;

if (a < b && a < c)
if ((a < b) && (a < c))

Wenn a kleiner als b und a kleiner als c ist, ist das Ergebnis des Ausdrucks wahr.
a, b und c sind ganze Zahlen, aber das Ergebnis des Vergleichs ganzer Zahlen ist ein logischer Wert (wahr, falsch), was bedeutet, dass wir logische Operatoren verwenden können.

„Ich weiß das alles schon.“

„Wirklich? Dann lass uns weitermachen.“

4)Bitweise Operatoren

Symbol Beispiel Name Beschreibung (was es tut)
& a & b UND Bitweises UND
| c | d ODER Bitweises ODER
~ ~a NICHT Bitweise NICHT
^ a ^ b XOR Bitweises „EXKLUSIV ODER“

Bitweise Operatoren führen bitweise Operationen an ganzen Zahlen durch.“

"Was ist das?"

„Jede Zahl wird als Satz von Bits dargestellt und das Ergebnis wird dann wie folgt berechnet:“

„Wenn das erste Bit beider Zahlen 1 ist, dann ist das erste Bit des Ergebnisses 1.“

„Wenn das zweite Bit beider Zahlen 1 ist, dann ist das zweite Bit des Ergebnisses 1. Und so weiter.“

„Gilt das für alle bitweisen Operatoren?“

„Es ist viel einfacher. Ein Bit kann nur zwei Werte haben, 0 und 1, oder?“

"Rechts."

„Dann stellen Sie sich 1 als wahr und 0 als falsch vor. Operationen an einzelnen Bits sind dann nahezu identisch mit logischen Operationen:“

Logischer Ausdruck Bitweiser Ausdruck
wahr && wahr == wahr 1&1 == 1
wahr && falsch == falsch 1&0 == 0
wahr || wahr == wahr 1|1 == 1
wahr || falsch == wahr 1|0 == 1
falsch || falsch = falsch 0|0 == 0
!false == wahr ~0 == 1
!true == false ~1 == 0

„Oh! Das ist so einfach.“

„Ja, vergessen Sie nur nicht, dass bitweise Operationen entsprechende Bits aus zwei Zahlen verwenden.“

„Ja, ich erinnere mich: Das erste Bit einer Zahl wird mit dem ersten Bit der zweiten gepaart, und das Ergebnis wird auch in das erste Bit geschrieben. Und das Gleiche gilt für die restlichen Bits.“

„Das stimmt. Haben Sie noch weitere Fragen?“

„Was ist mit dem XOR und ‚exklusiv oder‘?“

„Es ist ein Kinderspiel: Wenn die Werte unterschiedlich sind, ist es wahr; wenn sie gleich sind, ist es falsch.“

Logischer Ausdruck Bitweiser Ausdruck
wahr XOR wahr == falsch 1 ^ 1 == 0
false XOR false == false 0 ^ 0 == 0
wahr XOR falsch == wahr 1 ^ 0 == 1
false XOR true == true 0 ^ 1 == 1

Hier sind ein paar weitere Beispiele für bitweise Operationen:

Beispiel Zahlen als Bits Ergebnis als Bits Ergebnis
5 & 3 0000010 1  & 0000001 1 0000000 1 1
7 & 2 000001 1 1 & 000000 1 0 00000010 2
5 | 9 00000 1 0 1  | 0000 1 00 1 00001101 13
5 ^ 9 00000 101  ^ 00001001 0000 1100 12
~9 ~ 00001001 11110110 246

„Danke, Bilaabo. Jetzt weiß ich es.“

„Es gibt noch eine weitere Gruppe bitweiser Operatoren, die Schiebeoperatoren:“

5)Shift-Operatoren

Symbol Beispiel Name Beschreibung (was es tut)
>> a >> b Verschiebung nach rechts Verschiebt die Bits der Zahl a um b Stellen nach rechts.
<< c << d Linksverschiebung Verschiebt die Bits der Zahl c um d Stellen nach links.
>>> a >>> 2 unsignierte Rechtsverschiebung Verschiebt die Bits der Zahl a um 2 Stellen nach rechts.

„Was ist das für eine Straßenmagie?“

„Eigentlich ist alles ganz einfach. Schauen Sie es sich an:“

Beispiel Zahlen als Bits Ergebnis als Bits Ergebnis
10 >> 1 0000 101 0 >> 1 00000 101 5
10 >> 2 0000 101 0 >> 2 000000 10 2
10 << 1 0000 101 0 << 1 000 101 00 20
10 << 2 0000 101 0 << 2 00 101 000 40

„Das Verschieben der Bits einer Zahl nach links um 1 ist dasselbe wie das Multiplizieren der Zahl mit 2. Das Verschieben um zwei Ziffern entspricht der Multiplikation mit 4, das Verschieben um drei Ziffern – Multiplikation mit 8 und so weiter.“

„Eine Verschiebung nach rechts entspricht einer Division durch 2, 4, 8, 16 usw.“

„Aber was ist der Unterschied zwischen den Operatoren >>> und >>?“

„Sie unterscheiden sich bei der Arbeit mit negativen Zahlen. Das liegt daran, dass  vorzeichenbehaftete Zahlen das ganz linke Bit verwenden, um das Vorzeichen anzugeben. Infolgedessen hört eine negative Zahl auf, negativ zu sein, wenn sie nach rechts verschoben wird. Daher haben sie zwei verschiedene Operatoren entwickelt.“ Hör zu:"

Ausdruck Ergebnis Beschreibung
1 000 1010 >> 1 11 000 101 Die negative Zahl bleibt negativ.
Bei negativen Zahlen werden die eingehenden Bits mit 1en aufgefüllt.
1 000 1010 >> 2 111 000 10
1 000 1010 >> 3 1111 000 1
1 000 1010 >>> 1 01 000 101 Die negative Zahl ist nicht mehr negativ. Bei negativen Zahlen werden die eingehenden Bits mit Nullen aufgefüllt.
1 000 1010 >>> 2 001 000 10
1 000 1010 >>> 3 0001 000 1

„Die Verschiebung erfolgt nicht zyklisch. Bits, die über den linken oder rechten Rand der Zahl hinausgehen, werden einfach verworfen.“

6)Zuweisungsoperatoren

„Ich weiß bereits, was eine Aufgabe ist. Aber warum sagt man ‚Operatoren‘?“

„Weil es davon mehrere gibt ☺“

Operator Was es bedeutet
a += b; a = a + b;
a -= b; a = a - b;
a *= b; a = a * b;
a %= b; a = a % b;
a |= b; a = a | b;
a &= b; a = a & b;

„Ich denke, Sie verstehen die Logik.“

7)Inkrementierungs- und Dekrementierungsoperatoren

Notation Beispiel Beschreibung
++ a++;
++b;
Erhöht die Zahl um 1.
-- d--;
--i;
Verringert die Zahl oder Variable um 1.

„Gibt es einen Unterschied zwischen der Angabe der beiden Minuszeichen vor oder nach der Variablen?“

„Ja, das gibt es, wenn auch nicht sehr groß. Wenn eine Variable mit einem dieser Operatoren Teil eines Ausdrucks oder einer Zuweisung ist, dann gibt es Unterschiede. Ich möchte es Ihnen lieber anhand eines Beispiels zeigen:“

Beispiel Was wirklich passiert Beschreibung
int a = 3;
int b = ++a;
int a = 3;
a = a + 1;
int b = a;
a wird zunächst um 1 erhöht und dann im Ausdruck verwendet.
int a = 3;
int b = a++;
int a = 3;
int b = a;
a = a + 1;
a wird zuerst im Ausdruck verwendet und dann um 1 erhöht.
int a = 3;
return a++;
int a = 3;
int result = a;
a = a + 1;
return result;
Die Funktion gibt 3 zurück, aber der Wert von a wird um 1 erhöht.
int x = 5;
x = ++x + ++x;
int x = 5;
int a = x + 1;// The first term is 6
x = a;
int b = x + 1;// The second term is 7
x = b;
x = a + b;
Das Ergebnis ist hier 13. Zuerst erhöht sich x um 1, und dieser Wert ersetzt den ersten Term, und dann erhöht sich x erneut um 1.

„Whoa! Das ist cool!“

„Ich freue mich, dass es Ihnen gefallen hat. Aber wenn es keinen Ausdruck oder keine Zuordnung gibt, dann gibt es keine Unterschiede:“

„x++ entspricht x = x + 1.“

„++x entspricht x = x + 1.“

„Das werde ich mir merken. Danke, Bilaabo.“

8)  „ Ternärer Operator

„Dieser Operator verwendet nicht nur eine oder zwei Variablen oder Ausdrücke. Er verwendet drei Variablen oder Ausdrücke gleichzeitig:“

Notation Äquivalenter Code:
a ? b : c; if (a)
b
else
c
int min = a < b ? a : b; if (a < b)
min = a;
else
min = b;
return a != null ? a.length : 0; if (a != null)
return a.length;
else
return 0;

„Nun, das ist super praktisch.“

„Ja. Und es ist kompakt und der Code ist lesbar. Viel Spaß damit!“

9)Andere

„Egal wie gut Ihre Musiksammlung organisiert ist, Sie müssen trotzdem einen Ordner „Verschiedenes“ erstellen.“

„Ja, jeder, der jemals Musik kategorisieren musste, würde dem vollkommen zustimmen.“

„Es gibt also drei weitere Betreiber, von denen ich Ihnen erzählen möchte:“

Notation Beispiel Beschreibung
() (a + b) * c Klammern erhöhen die Priorität des Operators.
Dinge in Klammern werden zuerst ausgeführt.
[] c [i] = c [i + 1]; Holen Sie sich ein Array-Element nach Index.
. int n = a.length; Der „ Punktoperator “ greift auf Variablen und Methoden eines Objekts zu.

„Und schließlich ist hier eine Tabelle, die die Priorität der Operatoren zusammenfasst:“

Betreiber Beispiele
Höchste Priorität (Operatoren werden entsprechend ihrer Reihenfolge in dieser Tabelle ausgeführt)
()
[]
.
(a + b)
c [i] = c [i] + 1
++
--
~
!
+
-
i++; ++i;
--j; a--;
~c
!f
return +a;
return -a;
*
/
%
a * b
c / d
a % b
+
-
a + b
c - d
String s = "count"+"35";
>>
<<
>>>
a >> 3
b << 2
c >>> 3
<
<=
>
>=
a < b
a <= b
c > b
c >= b
==
!=
a == 3
a != 0
& a & 7
^ a ^ b
| a | b
&& (a < b) && (a < c)
|| (b != 0) || (c != 0)
? : = a > 0 ? a : -a;
=
*=, /=, %=
-=, +=
<<=. >>=, >>>=
&=, ^=. |=
Niedrigste Priorität (zuletzt ausgeführt)