Visual C# 2012 Grundkurs

Operatoren

Testen Sie unsere 2005 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
C# verfügt neben den Grundrechnungsarten zusätzlich über eine große Anzahl an weiteren Operatoren. Dieses Video erläutert die unterschiedlichen Arten, welche in C# vorhanden sind.

Transkript

In diesem Abschnitt widme ich mich den Operatoren in C#. Ein paar Operatoren haben wir schon kennengelernt. Es sind meistens die sogenannten binären Operatoren, die man da kennen lernt. Es sind Operatoren, die eine linke und eine rechte Seite haben, und der Operator verbindet diese beiden Seiten. Also so etwas wie "int i = 3 + 4;". Dann ist dieses "3 + 4" ein Ausdruck. Der hat eine linke und eine rechte Seite, und der Operator verbindet diese beiden Seiten. Im Grunde genommen, ist es so, dass das hier wiederum zu einer rechten Seite wird für diesen Operator, und das ist dann die linke Seite dieses Ausdrucks. Also ist auch dieser Zuweisungsoperator ein binärer Operator. Die ganze Zeile stellt zwei geschachtelte Ausdrücke dar mit jeweils binären Operatoren. Nebst den üblichen Grundrechnungsarten haben wir ein paar interessante Operatoren, und die würde ich jetzt der Reihe nach vorstellen. Setzen wir den Wert "i" auf "1". Dann Folgendes: Wir nehmen einen Wert "j = i << 1;". Dieser Operator nennt sich Shift-Operator. Man muss sich das jetzt so vorstellen: Der Wert "i" ist jetzt eine Binärzahl mit 32 Stellen. Da sind haufenweise Nullen und irgendwann am Ende kommt eine 1. Und was macht der Shift-Operator? Der erzeugt jetzt eine 0 und schiebt die 1 um eine Stelle weiter nach links. Das heißt, fast ein bisschen schwer darzustellen, deswegen erlaube ich mir das Ganze zu kopieren. Vorher ist der Wert von "i" der, und nach diesem Shift, sieht er so aus. Gucken wir mal, was das Resultat ist. Es ist der Wert "2". Jetzt kann ich das aber mal um 3 Stellen nach links shiften. Das wäre dann sozusagen 1, 2, 3. Das wäre also dieser Wert. Und wollen wir mal schauen, was das für ein Wert ist. Das ist der Wert "8 ". Jetzt merkt man schon irgendwie das mathematische Konzept. Das ist 2 hoch n. Wobei n diese rechte Seite des Shift-Operators ist. Das ist auch irgendwie klar. Das binäre System funktioniert einfach mal so. Die alleinstehende 1 hier, an den jeweiligen Stellen, sind also die Zahlen 1, 2, 4, 8, 16, 32, 64. Wenn man dann mehr Einsen dazu nimmt, mischen sich die. Das ist das binäre Zahlensystem. Der Shift-Operator kann umgedreht werden. Nehmen wir hier mal die Zahl 32, jetzt schifte ich nach rechts. Was passiert? Ich habe hier die Zahl 32, und wenn ich sie um 1 Stelle nach rechts schiebe, kriege hier eine 0 und die nächste Stelle wird die 1. Das Resultat sieht dann so aus. Wollen wir es mal zeigen: Wir kriegen hier eine 16, wenn wir den Wert 32 um 1 nach rechts schieben. Dann nehmen wir uns den nächsten Operator vor. Wir haben jetzt so die Vergleichsoperatoren. Wir können z. B. sagen "bool k = i < j;" dann ist k entweder wahr oder falsch. In dem Fall ist k falsch. Warum? Weil i ist größer als j. Das war vorher 32, jetzt wird es nach rechts geschoben, also ist es nur noch 16 oder ein kleinerer Wert. Wenn ich ihn jetzt nach links schiebe, dann wird ja j größer, dann muss ja i kleiner als j sein. Das kann ich hier schnell bestätigen. Nebst diesem "<" und "", ich kann auch "" "<=" oder "=" schreiben. Ich glaube, das ist relativ schnell überschaubar. Was eine sehr schöne Sache ist, wenn ich hier mal eine Klasse "Mitarbeiter" erzeuge. Jetzt erzeuge ich irgendwie so ein Objekt "Mitarbeiter m" = new Mitarbeiter();". Und was ich jetzt nachfragen kann? Ich habe hier so ein Objekt, nehmen wir mal "object o = m;". Jetzt weiß ich nicht, was ist dieses "o"? Und jetzt kann ich z. B. sagen "(o is Mitarbeiter);". Dieses "is" ist so ein Schlüsselwort des letztlichen Operators in C++, der Is-Operator. Der sagt jetzt, wenn "o" vom Typ "Mitarbeiter" ist, dann gib 2 zurück. Und man sieht, es kommt 2 zurück. Wenn ich jetzt sage "(o is object);", dann kommt natürlich auch 2 zurück, weil alles in .NET ein Object ist, da werden Sie immer eine 2 zurückbekommen. Aber wenn ich jetzt z. B. schreibe "(o is Program);", das stimmt jetzt irgendwie nicht, und dann gibt mir das System hier auch "false" zurück. C# kommt aus der Tradition aller Sprachen, die mit dem C beginnen, also C, C++, und unterscheidet von daher scharf zwischen Zuweisung und Gleichheit. Das hier ist der Zuweisungsoperator. Nehmen wir ein einfacheres Beispiel: "int i = 2" und "int j = drei". Jetzt möchte ich wissen: "bool k = i == j;". Ich möchte wissen: Sind i und j gleich? Für diesen Test ist der Gleichheitsoperator zuständig. Der wird nicht genauso geschrieben wie der Zuweisungsoperator, wie z. B. in BASIC, sondern es ist ein doppeltes Ist-gleich. Ich kann das Programm mal laufen lassen, muss natürlich "false" herauskommen, weil die beiden nicht gleich sind. Was muss ich tun, damit "true" rauskommt, entweder die Werte ändern oder den Ungleichheitsoperator benutzen. "!=" heißt einfach ist ungleich. Da kommt natürlich ein "true" heraus. Dann kann ich diese logischen Ergebnisse, da kommt ja ein Boolescher Wert raus, und mit diesen Booleschen Werten kann ich wunderbar hantieren. Ich kann z. B. sagen "int k =4;". Jetzt kann ich sagen "bool v = i != j && k != j;". Das sind jetzt 2 verknüpfte Bedingungen. Das läuft so mit diesem Doppel-Und-Zeichen. Das einfache Und-Zeichen ist auch ein Operator in der Sprache. Das bedeutet aber was anderes. Da kommen wir gleich noch darauf zu sprechen. In dem Fall habe ich Boolesche Werte, "i != j;" ist ein Boolescher Wert, und "j !=k;" ist ein Boolescher Wert. Die beiden kann ich mit diesem "&&" verknüpfen. Wenn ich das ausdrucke, dann kommt "true" raus, weil beide Hälften sind jeweils wahr, die Werte sind jeweils ungleich. Dieser Conditional-Endoperator gibt immer dann "true" zurück, wenn beide Seiten wahr sind. Wenn nur eine der beiden Seiten unwahr wird, was der Fall wäre, wenn ich hier wieder diesen Gleichheitsoperator einsetze, dann wird das Ergebnis "false". Beide Seiten müssen wahr sein. Ich kann jetzt diesen Oder-Operator einsetzen, also dieses "conditional or" oder der Boolesche-Or-Operator, und der sagt: "Wenn eine der beiden Seiten wahr ist, dann ist auch der gesamte Ausdruck wahr." Da eine der beiden Seiten, nämlich "i != j;", wahr ist, kommt als Resultat "true" raus. Um diesen Operator mal dazu zu bringen, "false" auszugeben, müssen einfach beide Seiten "false" sein. Das wäre z. B. der Fall, wenn ich auf beiden Seiten wieder diesen Gleichheitsoperator benutze, beide Ausdrücke sind jetzt falsch, dann muss natürlich auch das V-Oder-Resultat falsch sein. Das ist auch genau der Fall. Jetzt kommt noch etwas ganz Interessantes, und das ist die konditionale Zuweisung. Nehmen wir eine Stringvariable "s", und die soll jetzt, wenn dieser Wert "v" hier "wahr" ist, einen bestimmten Wert bekommen, und wenn er "falsch" ist, soll es einen anderen Wert bekommen. Dafür gibt es die konditionale Zuweisung. Die besteht aus 3 Teilen. Zunächst kommt ein Boolescher Ausdruck, dort können wir einfach "v" schreiben, danach kommen die beiden Ausdrücke, jeweils für den Fall, dass der Boolesche Ausdruck wahr ist, oder für den Fall, dass er falsch ist. Ich habe jetzt hier das Ganze mit einem Fragezeichen getrennt, und jetzt kommt das, was dem String zugewiesen werden soll, wenn "v" "wahr" ist, und da sage ich mal: "v" ist true". Jetzt trenne ich das mit einem Doppelpunkt ab von dem 3. Teil: "v" ist "falsch". Das ist das, was zugewiesen werden soll, wenn der Boolesche Ausdruck vorne falsch ist. Hier geben wir die Sache aus. Wir sehen, den Ausdruck haben wir vorhin "falsch" gemacht, und entsprechend kommt der hintere Teil zum Tragen von dieser konditionalen Zuweisung. Wenn ich jetzt wieder das Ganze umdrehe, dann kommt der vordere Teil zum Tragen. Diese Art an Operator nennt sich im Übrigen "ternärer Operator". Das heißt, wir haben 3 Teile, die durch 2 Operatoren unterteilt werden. Es heißt natürlich nicht "ternärer Operator", sondern es heißt "ternärer Ausdruck". Diese Zuweisung hier, "i = 2;", ist ein binärer Ausdruck. Das da ist ein ternärer Ausdruck, weil er 3 Teile hat. Den Abschluss bei den Operatoren machen jetzt die bitweisen Operatoren. Da können wir das alles rauslöschen, und ich suche jetzt ein paar interessante Werte. Nehmen wir hier eine 10 und hier eine 12. Ich schreibe mal die binären Repräsentationen dieser beiden Werte hin. Die 10 wäre 8 + 2 das sieht so aus, und die 12 sieht so aus. Das ist 8 + 4. Jetzt kann ich hier einen Wert "int k = i" und das verknüpfen mit einem Und-Operator, i und j. Dieses k geben wir dann hier aus. Was da passiert ist, dass eben die einzelnen bitweisen Stellen miteinander, mit der Und-Operation, verknüpft werden. 0 + 0 wird eine 0 geben, 1 +0 auch usw. Das Ganze wird wahrscheinlich den Wert 8 ergeben oder so was. Starten wir das Ganze mal, es hat den Wert 8. Entsprechend, wenn ich jetzt ein Oder-Operator verwende, das ist der Wert 14. Der Wert 14 = 2 + 4 + 8. Die vorderen 3 Bits sind gesetzt, weil auf den vorderen 3 Bits in einer der beiden Zahlen immer eine 1 gesetzt ist, und nur ganz hinten haben wir 2 Nullen. Ich habe jetzt den dritten Operator, den ich vorstellen wollte. Das ist der X-Or-Operator. Der X-Or-Operator gibt immer dann eine 1 aus, wenn die beiden Bits ungleich sind. Wenn Sie gleich sind, kommt eine 0 raus. Also käme hier eine 0 raus. Hier kommt eine 1 raus. Hier kommt eine 1 raus und hier kommt wieder eine 0 raus. Das Resultat muss 6 sein, und genau so ist es auch. Das sind die binären Operatoren. Damit sind wir jetzt alle Operatoren durchgegangen, die C# zu bieten hat. Sind es wirklich alle? Nein, natürlich nicht. Wir haben nämlich bislang nur die binären und ternären Operatoren besprochen, aber es gibt ja noch unäre Operatoren. Diese unären Operatoren sind das Inkrement und Dekrement. Tun wir die Sachen mal raus, und ich zeige jetzt den Inkrement-Operator. Dem j wird etwas zugewiesen, und zwar "i++;". Jetzt sind wir alle gespannt, was da rauskommt: "j ist 10". Sagen wir mal, das kann passieren. Aber jetzt ist die Frage: Was ist i an der Stelle? "i" ist jetzt 11. Das bedeutet: Wir haben hier einen Ausdruck. Innerhalb dieses Ausdrucks erscheint dieses "i++". Dieses "i++"heißt jetzt: Nimm den Wert "i" in diesem Ausdruck her, aber inkrementiere ihn nach dem Ausdruck. Machen wir es mal so, dann kann man es ein bisschen besser sehen. Wenn ich diese Zeile noch mal wiederhole, diese Ausgabe. "i" ist natürlich zunächst 10. Es wird während des Ausdrucks verwendet und dem j zugewiesen. Der Inkrement-Operator inkrementiert das i, aber erst nach diesem Ausdruck. Nach diesem Ausdruck ist i dann 11. Dieses Verhalten lässt sich ändern. Man kann nämlich den Operator auch vor das i stellen. Dann heißt es, inkrementiere das i zuerst und verwende es dann. Wenn ich jetzt das Ganze ausgebe, dann ist in dieser Anweisung "j = 11". Nach der Anweisung ist "i" natürlich sowieso 11. Also gibt es zwei Schreibweisen dieses Operators, die sich grundlegend voneinander unterscheiden. Jetzt haben wir alle Operatoren behandelt, mit denen wir irgendwelche Werte verändern können. Jetzt gibt es noch eine interessante Beobachtung, sagen wir mal, dass es nämlich Operatoren gibt, die uns gar nicht so auffallen in dem ganzen Gefüge. Und zwar, ist dieser Punkt hier auch ein Operator. Er verbindet sozusagen den Klassennamen mit dem Methodennamen. Auch das ist letztendlich irgendwie ein Operator. Wenn es darum geht, Rangfolgen zu bestimmen, also welche Operation hat Vorrang vor welcher anderen Operation, dann stellt man schnell fest, dass es Sinn macht, auch diese ganzen Geschichten als Operatoren zu bezeichnen. Wenn ich jetzt z. B. ein Array hier habe: "int[] arr = new int[] { 1, 2, 3 };", habe ich ein Array, das 3 Werte enthält. Und jetzt kann ich sagen: "j = i + arr [2]. Machen wir es andersrum, dann sieht man nämlich besser, was ich vorführen möchte: "arr [2] + i;". Jetzt ist es so, dass zunächst einmal diese eckige Klammer ausgewertet wird, und dann erst wird dieser Plus-Operator ausgewertet. Deswegen macht es Sinn, diese eckigen Klammern auch als Operatoren zu betrachten. Diese Arr-Operatoren, die hier und die hier, und die Klammern bei der Funktion, die nennen sich Primary Operators. Jetzt sind wir durch. Jetzt haben wir wirklich alle Operatoren von C# gezeigt.

Visual C# 2012 Grundkurs

Schreiben Sie eigene Programme in C# und lernen Sie dazu alle Schlüsselwörter und die meisten Konstrukte kennen, um sicher mit dieser Programmierspreche umzugehen.

7 Std. 1 min (44 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!