Die Subtraktion in Java (Die Subtraktion in Java, Minus, binärer Minusoperator), Lektion, Seite 722420
https://www.purl.org/stefan_ram/pub/subtraktion_java_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Die Subtraktion »…-…« in Java 

Einführendes Beispiel

In Java  kann auch eine Differenz  in der gewohnten Schreibweise als Ausdruck verwendet werden.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 1 - 1 ); }}
java.lang.System.out
0
Java 
1-1
auf deutsch:
● „Eins minus Eins“

Syntax

Ist A  ein Additivausdruck a  ein Multiplikativausdruck, so ist »A -a « wieder ein Ausdruck, die Differenz  von A  und a. Dabei wird A  auch Minuenden  und a  Subtrahend  genannt.

Die syntaktischen Eigenschaften des Subtraktionsoperators gleichen denen des Additionsoperators. (Die Subtraktion »-« ist linksassoziativ. Ihre Priorität  ist niedriger als die der Division.)

Wir erweitern das Syntaxdiagramm für Ausdrücke um den Subtraktionsoperator »-« (Additivausdruck).

Syntax (Syntaxdiagramm)

Primaerausdruck
.-. .----------. .-.
--->.--->( ( )--->| Ausdruck |--->( ) )--->.--->
| '-' '----------' '-' ^
| .----------. |
'------------>| Literal |-------------'
'----------'

Vorzeichenausdruck
.--------------------.
---.------------>| Primaerausdruck |----.---->
| '--------------------' ^
| .-. .--------------------. |
'--->( - )--->| Vorzeichenausdruck |----'
| '-' '--------------------' |
| .-. .--------------------. |
'--->( + )--->| Vorzeichenausdruck |----'
'-' '--------------------'

Multiplikativausdruck
.-----------------------.
---.--->| Vorzeichenausdruck |--------------------------------------.--->
| '-----------------------' ^
| .-----------------------. .-. .--------------------. |
'--->| Multiplikativausdruck |--->( * )--->| Vorzeichenausdruck |---'
| '-----------------------' '-' '--------------------' |
| .-----------------------. .-. .--------------------. |
'--->| Multiplikativausdruck |--->( / )--->| Vorzeichenausdruck |---'
'-----------------------' '-' '--------------------'

Additivausdruck
.-----------------------.
---.--->| Multiplikativausdruck |-----------------------------------------.--->
| '-----------------------' ^
| .-----------------------. .-. .-----------------------. |
'--->| Additivausdruck |--->( + )--->| Multiplikativausdruck |---'
| '-----------------------' '-' '-----------------------' |
| .-----------------------. .-. .-----------------------. |
'--->| Additivausdruck |--->( - )--->| Multiplikativausdruck |---'
'-----------------------' '-' '-----------------------'

Ausdruck
.-----------------.
--->| Additivausdruck |--->
'-----------------'

Syntax, Typanforderungen, Typergebnisse, Assoziativität und Priorität sind bei diesem binären Operator wie bei der Addition, nur daß hier keine  Zeichenketten als Operanden erlaubt sind. Der Wert ist hingegen die Differenz der Werte der beiden Operanden.

Die folgende Tabelle faßt Informationen über die bisher vorgestellten Operatoren zusammen und kann auch verwendet werden, wenn es als zu mühevoll erscheint, den Syntaxdiagrammen die Informationen zu entnehmen.

In der Tabelle stehen Operatoren mit höherer Priorität  weiter oben.

Eigenschaften

S P A (S = Stelligkeit ("Aritaet"), P = Position, A = Assoziativitaet)

() 1 Z Eingeklammerter Ausdruck
+ - 1 P Unaere vorangestellte Operatoren (Vorzeichen)
* / 2 I L "Punktrechnung": Multiplikation, Division
+ - 2 I L "Strichrechnung": Addition, Subtraktion

Man sagt ja auch: „Punktrechnung geht vor Strichrechnung.“ – „Punktrechnung“ umfaßt die Operatoren mit Punkten (die Multiplikation ‹ · › und die Division ‹ : ›) und „Strichrechnung“ die Operatoren mit Strichen (die Addition ‹ + › und die Subtraktion ‹  ›).

Genauigkeit _

Die Subtraktion kann kleine Unterschiede zwischen zwei Werten verdeutlichen.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 9_007_199_254_740_992. - 9_007_199_254_740_991. ); }}
Protokoll
1.0

Wenn die Zahlen zu groß werden, werden die hinteren Stellen vom Datentyp »double« nicht mehr korrekt dargestellt, so daß die Ergebnisse nach der Schulmathematik nicht mehr korrekt sind.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 9_007_199_254_740_993. - 9_007_199_254_740_992. ); }}
Protokoll
0.0

Der Datentyp »double« stellt Zahlen mit Nachkommastellen auch nur näherungsweise dar. Die kleinen Unterschiede der Näherungen werden durch die Subtraktion hervorgehoben. Das Ergebnis der Rechnung ist nach der Schulmathematik ebenfalls wieder falsch.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 0.1 + 0.2 - 0.3 ); }}
Protokoll
5.551115123125783E-17
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( ( 0.1 + 0.2 - 0.3 )*1E20 ); }}
Protokoll
5551.115123125783

Übungsfragen *

?   Operanden *

Wie viele Operanden hat der Operator »-« im Ausdruck »8 - 2«?

Nennen Sie die Operanden im Ausdruck »8 - 2«!

Wie viele Operanden im Ausdruck »8 - 2« sind positiv?

Wie viele Operanden hat der Operator »-« im Ausdruck »8 - 2 / 3«?

Beispiele ⃗

●   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.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 2 - 2.00 ); }}
transcript
0.0

Der Wert von »2« ist ja zunächst nicht gleich dem Wert von »2.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«.

●   Punktnumeralia ⃗

Es wird noch einmal deutlich, daß verschiedene  Literale denselben  Wert haben können, also sind Literale nicht  dasselbe wie ihre Werte.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 2.0 - 1.9999999999999999 ); }}
Konsole
0.0

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722420 stefan_ram:722420 Die Subtraktion in Java, Minus, binärer Minusoperator Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722420, slrprddef722420, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/subtraktion_java_de