Arithmetische Operatoren
In diesem Thema werden arithmetische Operatoren beschrieben, die in F# verfügbar sind.
Übersicht über binäre arithmetische Operatoren
In der folgenden Tabelle werden die binären arithmetischen Operatoren zusammengefasst, die für nicht geschachtelte Ganzzahl- und Gleitkommatypen verfügbar sind.
Binärer Operator | Notizen |
---|---|
+ (Addition, plus) |
Nicht geprüft. Mögliche Überlaufbedingung, wenn Zahlen addiert werden und die Summe den maximalen absoluten Wert überschreitet, der von dem Typ unterstützt wird. |
- (Subtraktion, minus) |
Nicht geprüft. Mögliche Unterlaufbedingung, wenn Typen ohne Vorzeichen subtrahiert werden oder wenn Gleitkommawerte zu klein sind, um durch den Typ dargestellt zu werden. |
* (Multiplikation, mal) |
Nicht geprüft. Mögliche Überlaufbedingung, wenn Zahlen multipliziert werden und das Produkt den maximalen absoluten Wert überschreitet, der von dem Typ unterstützt wird. |
/ (Division, geteilt) |
Eine Division durch Null verursacht eine DivideByZeroException für ganzzahlige Typen. Bei Gleitkommatypen bietet die Division durch Null die speziellen Gleitkommawerte infinity oder -infinity . Es gibt auch eine mögliche Unterlaufbedingung, wenn eine Gleitkommazahl zu klein ist, um durch den Typ dargestellt zu werden. |
% (Rest, verbleibend) |
Gibt den Rest einer Division zurück. Das Vorzeichen des Ergebnisses ist mit dem Vorzeichen des ersten Operanden identisch. |
** (Potenzierung, hoch) |
Mögliche Überlaufbedingung, wenn das Ergebnis den maximalen absoluten Wert für den Typ überschreitet. Der Potenzierungsoperator funktioniert nur mit Gleitkommatypen. |
Übersicht über unäre arithmetische Operatoren
In der folgenden Tabelle werden die unären arithmetischen Operatoren zusammengefasst, die für Ganzzahl- und Gleitkommatypen verfügbar sind.
Unärer Operator | Notizen |
---|---|
+ (positiv) |
Kann auf jeden arithmetischen Ausdruck angewendet werden. Ändert das Vorzeichen des Werts nicht. |
- (Negation, negativ) |
Kann auf jeden arithmetischen Ausdruck angewendet werden. Ändert das Vorzeichen des Werts. |
Das Verhalten bei Überlauf oder Unterlauf für ganzzahlige Typen ist die Umschließung. Das verursacht ein falsches Ergebnis. Bei ganzzahligen Typen kann ein Überlauf ein schwerwiegendes Problem sein, das wiederum zu Sicherheitsproblemen führen kann, wenn die Software nicht so programmiert ist, dass sie dies berücksichtigt. Wenn dies ein Problem für Ihre Anwendung ist, sollten Sie die geprüften Operatoren in Microsoft.FSharp.Core.Operators.Checked
verwenden.
Übersicht über binäre Vergleichsoperatoren
In der folgenden Tabelle sind die binären Vergleichsoperatoren aufgeführt, die für Ganzzahl- und Gleitkommatypen verfügbar sind. Diese Operatoren geben Werte vom Typ bool
zurück.
Gleitkommazahlen sollten nie direkt auf Gleichheit verglichen werden, da die IEEE-Gleitkommadarstellung keine exakte Gleichheitsoperation unterstützt. Zwei Zahlen, deren Gleichheit Sie einfach im Code überprüfen können, können tatsächlich verschiedene Bitdarstellungen aufweisen.
Operator | Notizen |
---|---|
= (Gleichheit, gleich) |
Dies ist kein Zuweisungsoperator. Er wird nur für Vergleiche verwendet. Dies ist ein generischer Operator. |
> (größer als) |
Dies ist ein generischer Operator. |
< (kleiner als) |
Dies ist ein generischer Operator. |
>= (größer oder gleich) |
Dies ist ein generischer Operator. |
<= (kleiner oder gleich) |
Dies ist ein generischer Operator. |
<> (ungleich) |
Dies ist ein generischer Operator. |
Überladene und generische Operatoren
Alle in diesem Thema beschriebenen Operatoren sind im Microsoft.FSharp.Core.Operator-Namespace definiert. Einige der Operatoren sind mithilfe von statisch aufgelösten Typparametern definiert. Das bedeutet, dass es einzelne Definitionen für jeden bestimmten Typ gibt, der mit diesem Operator funktioniert. Alle unären und binären Arithmetik- und bitweisen Operatoren befinden sich in dieser Kategorie. Die Vergleichsoperatoren sind generisch und funktionieren daher mit jedem Typ, nicht nur mit einfachen Arithmetiktypen. Diskriminierte Vereinigungs- und Datensatztypen verfügen über eigene benutzerdefinierte Implementierungen, die vom F#-Compiler generiert werden. Klassentypen verwenden die Methode Equals.
Die generischen Operatoren sind anpassbar. Zum Anpassen der Vergleichsfunktionen überschreiben Sie Equals, um einen eigenen benutzerdefinierten Gleichheitsvergleich bereitzustellen, und implementieren Sie dann IComparable. Die System.IComparable-Schnittstelle besitzt eine einzige Methode: CompareTo.
Operatoren und Typrückschluss
Die Verwendung eines Operators in einem Ausdruck beschränkt den Typrückschluss auf diesen Operator. Außerdem verhindert die Verwendung von Operatoren die automatische Generalisierung, da die Verwendung von Operatoren einen arithmetischen Typ impliziert. Ohne weitere Informationen leitet der F#-Compiler int
als Typ von Arithmetikausdrücken ab. Sie können dieses Verhalten überschreiben, indem Sie einen anderen Typ angeben. Daher werden die Argumenttypen und der Rückgabetyp von function1
im folgenden Code als int
abgeleitet, aber die Typen für function2
werden als float
abgeleitet.
// x, y and return value inferred to be int
// function1: int -> int -> int
let function1 x y = x + y
// x, y and return value inferred to be float
// function2: float -> float -> float
let function2 (x: float) y = x + y