共用方式為


算術運算子 (F#)

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

二元算術運算子摘要

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

二元運算子

備註

+ (加法、加上)

未檢查。 當數字相加,總和超出型別所支援的最大絕對值時,可能發生溢位狀況。

- (減法、減去)

未檢查。 當減去不帶正負號的型別時,或者當浮點值太小,無法由型別表示時,可能發生反向溢位狀況。

* (乘法、相乘)

未檢查。 當數字相乘,乘積超出型別所支援的最大絕對值時,可能發生溢位狀況。

/ (除法、除以)

如果是整數型別,除數為零時會引發 DivideByZeroException。 如果是浮點型別,除數為零時會產生特殊浮點值 +Infinity 或 -Infinity。 當浮點數太小,無法由型別表示時,也可能會發生反向溢位狀況。

% (模數、取餘數)

傳回除法運算的餘數。 結果的符號與第一個運算元的符號相同。

** (乘冪、自乘至乘冪)

當結果超出型別的最大絕對值時,可能發生溢位狀況。

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

一元算術運算子摘要

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

一元運算子

備註

+ (正)

可以套用至任何算術運算式。 不會變更值的正負號。

- (負運算、負)

可以套用至任何算術運算式。 會變更值的正負號。

如果是整數型別,在溢位或反向溢位時的行為是循環, 這會導致不正確的結果。 整數溢位可能是嚴重的問題,特別是當撰寫軟體時未考量此狀況時,可能導致安全性問題。 如果這對您的應用程式是個顧慮,請考慮使用 Microsoft.FSharp.Core.Operators.Checked 中已經過檢查的運算子。

二元比較運算子摘要

下表說明可用於整數和浮點型別的二元比較運算子。 這些運算子會傳回 bool 型別的值。

浮點數絕不能針對相等性直接進行比較,因為 IEEE 浮點表示不支援完全相等運算。 透過檢查程式碼輕易驗證為相等的兩個數字,可能會有不同的位元表示。

運算子

備註

= (相等、等於)

這不是指派運算子, 而只能用於比較。 這是泛型運算子。

> (大於)

這是泛型運算子。

< (小於)

這是泛型運算子。

>= (大於或等於)

這是泛型運算子。

<= (小於或等於)

這是泛型運算子。

<> (不等於)

這是泛型運算子。

多載和泛型運算子

本主題討論的所有運算子都是在 Microsoft.FSharp.Core.Operators 命名空間中定義。 其中部分運算子是透過靜態解析型別參數來定義, 這表示與該運算子搭配使用的每個型別都有個別的定義。 所有一元和二元算術運算子以及位元運算子都屬於此分類。 比較運算子為泛型,因此可與任何型別搭配使用,而不只是基本算術型別。 已區分的聯集和記錄型別都有 F# 編譯器所產生的各自專屬自訂實作。 類別型別會使用 Equals 方法。

泛型運算子是可自訂的。 若要自訂比較函式,請覆寫 Equals 並提供您的自訂相等比較,然後實作 IComparableIComparable 介面有一個方法,即 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

請參閱

參考

符號和運算子參考 (F#)

運算子多載 (F#)

位元運算子 (F#)

Boolean 運算子 (F#)