Die Subtraktion »…-…« in C♯
Einführendes Beispiel
In C♯ kann auch eine Differenz in der gewohnten Schreibweise als Ausdruck verwendet werden.
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( 1 - 1 ); }}global::System.Console.Out
0
Syntax
Das Zeichen »-« wird „Minus“ oder „Bindestrich“ genannt. Die Subtraktion wird mit dem Minus »-« geschrieben.
- Neue, erweiterte Syntax
Ausdruck
.----------.
---.----------->| Literal |---------------------------.---->
| '----------' |
| .-. .----------. |
'--->( - )-->| Ausdruck |---------------------------'
| '-' '----------' |
| .-. .----------. |
'--->( + )-->| Ausdruck |---------------------------'
| '-' '----------' |
| .-. .----------. .-. |
'--->( ( )-->| Ausdruck |-->( ) )-------------------'
| '-' '----------' '-' |
| .----------. .-. .----------. |
'----------->| Ausdruck |-->( / )-->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'----------->| Ausdruck |-->( + )-->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'----------->| Ausdruck |-->( - )-->| Ausdruck |----'
'----------' '-' '----------'
Syntax, Typanforderungen, Typergebnisse, Assoziativität und Priorität sind bei diesem binären Operator wie bei der Addition, nur daß hier keine Zeichenketten erlaubt sind und man den linken Operanden als Minuenden und den rechten als Subtrahenden bezeichnet. Die Semantik (der Wert) ist hingegen die der Subtraktion (Differenz).
Assoziativität
Die Assoziativität kann man bei der Subtraktion deutlicher erkennen als bei der Addition, weil das Ergebnis einer Abfolge zweier Subtraktionen von der Art der Zusammenfassung von Operanden abhängt.
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( 8 - 2 - 3 ); }}global::System.Console.Out
3
- Operationen bei der Auswertung von »8 - 2 - 3«:
- Erste Operation Berechnung der Differenz »8 - 2«, Ergebnis »6«.
_____
8 - 2 - 3 →
6 - 3- Zweite Operation Berechnung der Differenz »6 - 3«, Ergebnis »3«.
_____
6 - 3 →
3
Addition und Subtraktionen haben die gleiche Priorität. Daher wird bei einer Kombination beider Operatoren, in der sie einen Operanden teilen, ebenfalls gemäß der Assoziativität dieser beiden Operatoren von links nach rechts zusammengefaßt.
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( 8 - 4 + 4 ); }}global::System.Console.Out
8
- Operationen bei der Auswertung von »8 - 4 + 4«:
- Erste Operation Berechnung der Differenz »8 - 4«, Ergebnis: »4«.
_____
8 - 4 + 4 →
4 + 4- Zweite Operation Berechnung der Summe »4 - 4«, Ergebnis: »4«.
_____
4 + 4 →
8
● Gleichheitstest
Die Subtraktion kann gut verwendet werden, um zu erkennen, ob zwei Numeralia den gleichen Zahlenwert repräsentieren: Nur dann ist ihre Differenz gleich 0.
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( 0 - 0.00 ); }}global::System.Console.Out
0
Der Wert von »0« ist ja zunächst nicht gleich dem Wert von »0.00«, da beide Werte sich schon im Typ unterscheiden. Da bei dieser Subtraktion der Typ der beiden Operanden jedoch nach »double« angeglichen wird, ergibt sich dann doch das Ergebnis »0.0«.
Literale mit einem Operatorzeichen
Das Literal »2e+03« ist keine Summe, sondern bedeutet „2·10³“. Um Summen deutlich von solchen Literalen mit einem inneren Pluszeichen oder einem inneren Minuszeichen zu unterscheiden, bietet es sich an, die binären Operatoren »+« und »-« mit einem umgebenden Leerzeichen zu verwenden.
Beispiele
● Punktnumeralia
Es wird noch einmal deutlich, daß verschiedene Literale denselben Wert haben können, also sind Literale nicht dasselbe wie ihre Werte.
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( 2.0 - 1.9999999999999999 ); }}global::System.Console.Out
0
Das folgende Programm zeigt, daß die Verwendung des Typs »decimal« es erlaubt, in manchen Fällen noch die mathematisch korrekten Ergebnisse zu erhalten.
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( 2.0m - 1.9999999999999999m ); }}global::System.Console.Out
0.0000000000000001
Jedoch zeigt das folgende Programm, daß auch der Typ »decimal« nur eine beschränkte Genauigkeit hat.
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( 2.0m - 1.99999999999999999999999999999m ); }}global::System.Console.Out
0.0000000000000000000000000000
Übungsfragen
? Operatoren
Ist der folgende Quelltext ein Ausdruck?
Welches der Minuszeichen »-« steht in dem folgenden Quelltext für einen unären Operator und welches für einen binären?
- Quelltext
- 2 - - - 2
? Operanden
Wie viele Operanden hat der Ausdruck »8 - 2«?
- A: keinen.
- B: einen.
- C: zwei.
- D: drei.
Nennen Sie die Operanden im Ausdruck »8 - 2«!
Wie viele Operanden im Ausdruck »8 - 2« sind positiv?
- A: keiner.
- B: einer.
- C: zwei.
- D: drei.
Wie viele Operanden hat der Operator »-« im Ausdruck »8 - 2 / 3«?
- A: keinen.
- B: einen.
- C: zwei.
- D: drei.
Zusatzaufgaben *
/ Zusatzaufgabe *
Die Kreiszahl ‹ π › ist gleich ‹ 4 ·( 1 − 1/3 + 1/5 − 1/7 + 1/9 − 1/11 + 1/13 − 1/15 + … ) ›.
Schreiben Sie ein Programm, welches unter Verwendung dieser Gleichheit eine möglichst gute Näherung für ‹ π › ausgibt.