共用方式為


算術運算子

本主題描述 F# 中可用的算術運算子。

二進位算術運算子摘要說明

下表摘要說明 Unboxed 整數和浮點型別可用的二進位算術運算子。

二元運算子 備註
+ (加法、加號) 已取消核取。 數值相加且總和超過型別支援的最大絕對值時,可能發生的溢位條件。
- (減法、減號) 已取消核取。 減去不帶正負號的型別,或浮點值過小而無法由型別表示時,可能發生的反向溢位條件。
* (乘法、倍數) 已取消核取。 數值相乘且乘積超過型別支援的最大絕對值時,可能發生的溢位條件。
/ (除法、相除) 除以零會產生整數型別的 DivideByZeroException。 如為浮點型別,除以零會產生特殊浮點值 infinity-infinity。 如果浮點數太小而無法由型別表示,也可能會發生反向溢位條件。
% (餘數、剩餘) 傳回除法運算後的餘數。 結果的正負號會與第一個運算元的正負號相同。
** (乘冪、次方) 結果超過型別的最大絕對值時,可能發生的溢位條件。

乘冪運算子僅適用浮點型別。

一元算術運算子的摘要說明

下表摘要說明整數和浮點型別可用的一元算術運算子。

一元運算子 備註
+ (正數) 可以套用至任何算術運算式。 不會變更值的正負號。
- (負數、負) 可以套用至任何算術運算式。 會變更值的正負號。

整數型別的溢位或反向溢位行為是換行。 這會導致不正確的結果。 整數溢位可能會是嚴重問題,會在軟體寫入時未考量安全性的情況下,引起安全性問題。 如果您的應用程式需考量安全性,建議在 Microsoft.FSharp.Core.Operators.Checked 使用已檢查的運算子。

二進位比較運算子的摘要說明

下表顯示可用於整數和浮點型別的二進位比較運算子。 這些運算子會傳回型別 bool 的值。

浮點數絕不得直接比較是否相等,因為 IEEE 浮點的表示法不支援完全相等運算。 兩個可在檢查程式碼時輕易驗證相等的數值,實際上可能會有不同的位元表示法。

運算子 備註
= (等號、相等) 它不是指派運算子。 它只能用於比較。 它是泛型運算子。
> (大於) 它是泛型運算子。
< (小於) 它是泛型運算子。
>= (大於或等於) 它是泛型運算子。
<= (小於或等於) 它是泛型運算子。
<> (不等於) 它是泛型運算子。

多載與泛型運算子

本主題中討論的所有運算子在 Microsoft.FSharp.Core.Operators 命名空間中皆已定義。 某些運算子是使用靜態解析型別參數來定義。 也就是說,每個可搭配對應運算子的特定型別都有個別的定義。 所有一元和二進位算術和位元運算子都屬此類別。 比較運算子是泛型,因此適用於任何型別,而不只是基本的算術型別。 差別聯集和記錄型別有自己的自訂實作,由 F# 編譯器產生。 類別型別會使用方法 Equals

泛型運算子可自訂。 若要自訂比較函式,請將 Equals 覆寫,提供自己的自訂相等比較,然後實作 IComparable。 介面 System.IComparable 的單一方法為 CompareTo 方法。

運算子和型別推斷

在運算式中使用的運算子會限制該運算子的型別推斷。 此外,運算子的使用可防止自動泛型化,因為運算子的使用會指示算術的型別。 如果不存在任何其他資訊,F# 編譯器就會將 int 推斷為算術運算式的型別。 您可以藉由指定其他型別來覆寫此行為。 因此,下列程式碼中 function1 的引數型別和傳回型別會推斷為 int,但 function2 的型別會推斷為 float

// 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

另請參閱