Hallo und Willkommen. Nachdem wir über alle
Hauptoperatoren gesprochen haben, die grundlegenden, die seltsamen, müssen wir
über dieses kleine Konzept der Operatorpriorität sprechen.
Dies kommt also im Grunde genommen ins Spiel, wenn Sie die Reihenfolge dieser Operatoren bewerten.
Die Priorität des Operators bestimmt also die Gruppierung der Begriffe und des Ausdrucks
und entscheidet, wie ein Ausdruck ausgewertet wird.
Jetzt müssen Sie wirklich nichts davon verstehen, wenn
Sie Klammern verwenden, auf die wir gleich eingehen werden, aber Sie müssen dieses Konzept
verstehen, weil es Teil der Sprache ist, die Teil des Sprachverständnisses ist.
Der Vorrang wird also die Reihenfolge der Auswertung bestimmen, wenn zwei
Operatoren einen Operanden gemeinsam nutzen.
Und das wird anhand eines Beispiels deutlich.
So hat beispielsweise der Multiplikationsoperator eine höhere Priorität als der
zusätzliche Operator.
Bestimmte Betreiber werden unterschiedliche Auswertungsreihenfolgen haben. Wenn Sie also eine zusammengesetzte Anweisung
ausführen, bei der
Sie viele verschiedene Berechnungen durchführen, z. B. 7 plus 3 mal 2.
Dies kann mehrere Ergebnisse haben,
die Addition und Sie führen die Multiplikation durch.
Sie müssen verstehen, ob ich zuerst die Addition durchführen muss oder ob ich zuerst die Multiplikation durchführen muss, da sich
das Ergebnis je nachdem, was Sie zuerst tun, ändert.
So ist dieses x beispielsweise 7 plus 3 mal 2, das
Ergebnis kann entweder 13 oder 20 sein, abhängig von der
Reihenfolge, in der Sie jeden Operanden auswerten.
Die Reihenfolge der Ausführung der verschiedenen Operationen kann also einen großen Unterschied machen.
Und deshalb müssen Sie den Vorrang verstehen.
C enthält spezifische Regeln für die Auswahl, was zuerst getan werden soll.
In diesem Fall mache ich die Multiplikation von Plus. Nun, c wird dir sagen, was passieren wird.
Wenn Sie diese in Klammern setzen, sagen Sie im Idealfall, was zu tun
ist, und treffen diese Entscheidung. Wenn Sie dies jedoch nicht in Klammern
setzen, wird die Programmiersprache die Entscheidung für Sie treffen.
In c hat die Multiplikation also eine höhere
Priorität als der Additionsoperator. Was also passieren wird, ist, dass das Ergebnis 13 sein wird.
Jetzt könnte man entweder 7 plus 3 sagen, was 10 ist,
und dann mit 2 multiplizieren, das Ergebnis wäre 20.
Oder Sie können 7 plus 3 mal 2 machen, was 7 plus 6 ist, was 13 ist.
So können Sie unterschiedliche Werte haben.
Das ist nicht eindeutig. Machst du zuerst das Plus oder machst du zuerst die Multiplikation?
Zum Glück wird das wieder von der Sprache entschieden. Aber Sie können sehen, wie es zwei unterschiedliche Ergebnisse gibt.
7 plus 3 mal 2
oder 7 plus 3 mal 2. Sie sehen die Pause dort.
Jetzt wird c Letzteres tun. Es wird zuerst die Multiplikation durchgeführt, da
dies eine höhere Priorität hat.
Also wird es 3 mal 2 machen, was 6 ist, und dann wird es zu 7 addieren.
Das Ergebnis x wird also 13 sein, da das Sternchen
eine höhere Priorität hat als die Addition.
Und so gibt es Regeln für jeden einzelnen Operator,
welcher Operator Vorrang vor dem anderen hat.
Es gibt eine Vorrangstufe.
Und Multiplikation und Division haben eine höhere Priorität als Addition und Subtraktion.
Das heißt, sie werden zum Beispiel zuerst aufgeführt.
Sie können all diesen Vorrang vermeiden und die Sprache für sich
entscheiden lassen, wenn Sie Klammern angeben.
Klammern gruppieren die Ausdrücke immer mit
der höchsten Priorität. Wenn ich also 7 plus 3 sage und dies in
Klammern anführe, wird immer zuerst die Addition durchgeführt.
Wenn ich 3
mal 2 sage und dies in
Klammern anschließe, wird immer die Multiplikation durchgeführt und dann alles außerhalb der Klammern hinzugefügt.
Sie sollten also wirklich nur Klammern verwenden. Verwenden Sie immer Klammern.
Andernfalls entscheidet die Sprache für Sie. Sie müssen sich alle Vorrangstufen merken,
was schwierig ist, wie ich Ihnen in der nächsten Tabelle zeigen werde.
Es gibt viele verschiedene Operatoren, und Sie müssen den Vorrang
für all diese verschiedenen Operatoren kennen.
Es kann also sehr, sehr verwirrend werden.
Dies ähnelt dem Wissen, dass Sie entweder die Sprache eine implizite Konvertierung für Sie durchführen lassen oder
dass Sie dies mit einer expliziten Konvertierung mit einem Cast-Operator tun. Dieselbe Art
von Idee hier, verwenden Sie einfach Klammern.
Wenn wir uns also diese Tabelle ansehen, die wir uns gleich ansehen werden, denke ich, weil
ich zuerst über Assoziativität sprechen möchte.
Die Assoziativität hängt mit der Priorität zusammen, denn was passiert,
wenn zwei Operatoren dieselbe Priorität haben? Wie finden Sie dann die Reihenfolge heraus?
Dann wenden Sie Assoziativität an. Wenn also Operatoren
dieselbe Priorität haben, wenden Sie zusätzliche Regeln an.
Assoziativität ist also im Grunde genommen, ob Sie auf
der linken Seite beginnen und nach rechts oder rechts nach links gehen.
Wenn Sie also einen Operanden gemeinsam nutzen und beide in derselben Reihenfolge
ausgeführt werden, werden Sie sie in der Reihenfolge der Anweisung ausführen,
die auf der Assoziativitätsregel basiert. Für die meisten Bediener ist
die Reihenfolge also von links nach rechts. Lassen Sie mich Ihnen ein Beispiel zeigen.
Wenn Sie sagen, 1 ist gleich 2 ist nicht gleich
3, haben Ausrufezeichen gleich und nicht gleich Operatoren Ausrufezeichen
gleich haben die gleiche Priorität.
In diesem Fall haben wir also eine Mehrdeutigkeit. Wir haben ein Problem.
Wir wissen nicht, was wir zuerst bewerten sollen. Wir wissen nicht, ob wir 1 gleich
2 oder 2 gleich
3 machen müssen, und es ist wichtig, weil Sie einen Booleschen Ausdruck machen.
Dies ist hier ein boolescher Ausdruck, also kehren die Jungs zu wahr oder falsch zurück.
Sie würden hier also Assoziativität anwenden.
Die Assoziativität von Gleichheit und Nichtgleichheit ist von links nach rechts.
Du wirst zuerst 1 gleich 2 machen, das wird falsch sein.
Und dann wirst du falsch sagen, was
nicht gleich 3
ist, was es nicht ist. Also ist 1 gleich
2 und dann ist das nicht gleich 3.
Das Ergebnis wird also falsch sein. Der Ausdruck links wird also zuerst ausgeführt
und bewegt sich nach rechts.
Wie Sie sich das vorstellen möchten, entspricht im Grunde genommen diesen Klammern.
Zuerst werden Sie bewerten, dass eins gleich 2 ist.
Und wenn das dann wahr oder falsch ist, werden Sie sagen, dass dies gleich 3 ist.
Und das ist verwirrend, weil es keine
wahren oder falschen Werte hat.
Aber 1 gleich gleich denken Sie daran, dass dies der Vergleichsoperator ist, nicht der Zuweisungsoperator.
Und wir verwenden hier keine Variablen, deshalb ist es noch verwirrender.
Wenn Sie diese Zahlen jedoch in
Variablen einfügen würden, würden Sie nur sagen, wenn x gleich y ist. Wenn
also x 1 und y 2 wäre, würde dies 2 falsch auswerten.
Weil sie beide nicht gleich sind. Und wenn 3 eine andere
Variable z wäre, die gleich 3
ist, würden Sie sagen, dass x gleich y falsch ist,
z gleich 3 ist. Falsch ist
also nicht gleich 3. Es wäre also falsch.
Also 1 gleich gleich 2 wird zuerst ausgeführt, Ergebnis wieder 0 falsch.
Dann ist 0 ungleich 3, wird ausgeführt und ergibt 1 true.
Also sagte ich anfangs falsch, aber offensichtlich ist 0 nicht gleich 3, was
das Ganze als falsch bewerten würde.
Das Ganze würde sich als wahr herausstellen, es tut mir leid, weil 0 nicht gleich 3 ist.
Also 0 ungleich 3 Ich habe gesagt, es ist falsch, weil sie nicht gleich sind, aber
das bedeutet, dass es tatsächlich als wahr bewertet wird.
So hübsch ordentlich dort. Hier ist unsere Tabelle, in der alle
Vorrang- und Assoziativitätsregeln aufgeführt sind, und es ist sehr schwer, sich dies zu merken.
Also nochmal, was machst du, benutze Klammern.
Aber hier ist der Tisch. Die höchste Prioritätsebene befindet
sich oben, sodass die Postfix-Operatoren die höchste Präferenzstufe haben.
Und wenn Sie einen dieser Ausdrücke verwenden, lesen Sie von
links nach rechts.
Also haben die Postfix-Operatoren, Dinge wie
die Klammern, die höchste Priorität.
Jedes Mal, wenn Sie etwas in Klammern setzen, wird dies wirksam.
Aber Sie haben die Klammern und dann
haben Sie Postfix-Operatoren. Wir haben nicht über
ein paar Zeiger gesprochen, was dieser Bindestrich größer ist als, aber
wir wissen jetzt über Plus Plus und
Minus Minus, die Postfix sind
und die die höchste Priorität haben. Unäre Operatoren Dinge wie das Plus-Minus, das
Ausrufezeichen für nicht, die Tilde für das bitweise, das Plus plus das
Minus-Minus und dann wird der Casting-Operator als unärer Operator bezeichnet, da er nur einen Operanden hat.
Und dann ist der Sternchenoperator der Zeigeroperator. Das kaufmännische Und ist das bitweise und
die Größe von.
Diese haben die nächsthöhere Priorität.
Aber hier lesen Sie tatsächlich von rechts
nach links zur Auswertung, wenn Sie zwei in derselben Zeile haben.
Und dann gehen wir einfach in Bestellungen. Sie müssen diese Reihenfolge kennen und auswendig lernen. So ziemlich schwierig, aber ich
wollte es Ihnen zeigen, wollte nur eine kleine
Illustration haben, um einige der Tabellen zu zeigen. Es gibt viele Betreiber.
Und so gibt es viele Präsenzstufen, und es gibt zum größten Teil die Assoziativität, wie wir zuvor
gesagt haben, von links nach rechts.
Sie haben nur die Assoziativität von rechts links für die unären Operatoren.
Die bitweisen Operatoren folgen also von links nach
rechts nach unten. Bedingte ternäre Operatoren von rechts nach links.
Zuweisungsoperatoren stehen immer ganz unten. Das wird immer zuletzt ausgewertet.
Und wenn sie gleich sind, bewerten Sie andere von rechts nach links.
Und dann wird Komma auch als Operator bezeichnet. Das ist von links nach rechts.
Ein anderes Konzept, obwohl Vorrang und Assoziativität,
das wir mit diesen anderen Beispielen
nicht wirklich ansprechen werden. Wir werden die ganze Zeit die
Klammern verwenden, und genau das möchten Sie tun.
Aber auch hier, wenn Sie die Sprache vollständig verstehen möchten, möchten Sie diese Konzepte verstehen, deshalb sage ich es Ihnen.
Niemand kann tatsächlich behaupten, dass er die Sprache beherrscht, wenn er einige der Details wie diese nicht kennt.
Verwenden Sie jedoch so viele Klammern wie möglich. Vielen Dank.