NXC: Mathematische und logische Operatoren

Aus Wikibooks

Mathematik[Bearbeiten]

Natürlich kann man in NXC auch mit Variablen rechnen. Hier ein Beispiel:

 int a = 543;
 short b = 2;
 long c = 4444;
 long d;
 d = (b + c) / a;

Vielleicht erinnern Sie sich, dass es in NXC keine Kommazahlen gibt. Deswegen werden bei einer Division die Nachkommastellen abgeschnitten. Hier die wichtigsten mathematischen Operatoren:

Rechenart Operator
Addition +
Subtraktion -
Multiplikation *
Division /
Modulo %

Bei der Modulo-Operation wird der Rest einer Divison zurückgegeben.

Mit dem =-Operator wird ein Wert (z.B. aus einer Operation) einer Variablen zugewiesen. Das kann zum Beispiel so aussehen:

 int a = 2;
 a = a + 5;

Für diesen Fall, dass man nur etwas mit der Variablen "macht" und das Ergebnis zugewiesen wird, gibt es die Kombinationen von = und den mathematischen Operatoren. Hier das Gleiche nochmal in Kurzform:

 int a = 2;
 a += 5;

Für den speziellen Fall, dass man nur Eins addieren oder abziehen muss, gibt es die Operatoren ++ (+=1) und -- (-=1).

Außerdem gibt es den unären Operator - der einfach das Vorzeichen wechselt.


Logik[Bearbeiten]

Der Datentyp, der die Zustände repräsentiert, hat seine eigenen Operatoren.

Es gibt den unären Operator Negation (!), die binären Operatoren Kleiner als (<), Größer als (>), Kleiner gleich (<=), Größer gleich (>=), Gleich (==), Ungleich (!=), Und (&&) und Oder (||) und den einzigen ternären Operator der Sprache: ?:.

Die Negation macht aus dem Operanden das Gegenteil:

 bool a= true;
 a = !a

a ist am Ende false.

Die binären Operatoren, abgesehen von ==, !=, && und ||, kennen wir aus der Mathematik:

  • Kleiner als: Wenn der linke Operand kleiner als der rechte ist, dann ist das Ergebnis true, ansonsten false.
  • Größer als: Wenn der linke Operand größer als der rechte ist, dann ist das Ergebnis true, ansonsten false.
  • Kleiner als: Wenn der linke Operand kleiner oder gleich dem rechten ist, dann ist das Ergebnis true, ansonsten false.
  • Größer als: Wenn der linke Operand größer oder gleich dem rechten ist, dann ist das Ergebnis true, ansonsten false.

Ein Beispiel:

 int a = 10;
 bool b,c,d,e;
 a++;
 a *= 2;
 b = a < 24;
 c = a > 24;
 d = a >= 22;
 e = a <= 22;

Am Ende ist: b = true, c = false, d = true und e = true.

Die Operatoren Gleich (==) und Ungleich (!=) sind nicht komplizierter:

  • Gleich: Wenn beide Operanden einander gleich sind, ist das Ergebnis true, ansonsten false.
  • Ungleich: Wenn die Operanden ungleich sind, ist das Ergebnis true, ansonsten false.

Wieder ein Beispiel:

 int a = 10;
 bool b,c,d,e;
 a++;
 a *= 2;
 b = a != 24;
 c = a == 24;
 d = a != 22;
 e = a == 22;

Am Ende ist b = true, c = false, d = false und e = true.

Die zwei Operatoren Und (&&) und Oder (||) verbinden nicht zwei Zahlen miteinander, sondern zwei Zustände:

  • Und: Wenn beide Operanden gleich true sind, ist das Ergebnis true, ansonsten false.
  • Oder: Wenn mindestens einer der beiden Operanden gleich true ist, ist das Ergebnis true, ansonsten false.

Und wieder ein Beispiel:

 int a = 10;
 bool b,c,d,e=false;
 a++;
 a *= 2;
 b = (a <= 24) && (!e);
 c = (a >= 22) || (e);
 d = (e || true) && (a != (true && (false || !e) ) );
 e = ( ( (d && e) || (24 > a) && true ) || e && (a > 44 || !e) );

Der Übersichtlichkeit habe ich hier geklammert. Das ist ein extremes Beispiel, das verdeutlichen soll, dass die Operatoren beliebig verschachtelt werden können. Ich gebe hier NICHT die Lösung an. Nehmen Sie sich Zeit, alles selbst nachzuvollziehen.

Es gibt, wie gesagt, noch den ternären Operator. Er ist einer If-Kontrollstruktur nicht unähnlich, ist aber ein Operator und eingeschränkt. -to be continued-