C# 運算子
C# 提供了許多的運算子 (也就是在運算式中用來指定要執行運算的符號)。 在整數型別上的運算,例如 ==、!=、<、>、<=、>=、binary +、binary -、^、&。 |~、 ++、 -- 及 sizeof() 通常都在列舉型別上被允許。 此外,許多運算子可由使用者多載來改變意義,以便套用到使用者定義型別上。
下表會依照優先順序的分組方式列出 C# 運算子, 每個群組內的運算子都有相同的優先順序。
運算子分類 |
運算子 |
---|---|
主要 |
|
一元 |
|
乘法類 (Multiplicative) |
|
加法類 (Additive) |
|
SHIFT |
|
關係和型別測試 |
|
相等 |
|
邏輯 AND |
|
邏輯 XOR |
|
邏輯 OR |
|
條件式 AND |
|
條件式 OR |
|
Null 聯合 |
|
條件式 |
|
指派和 Lambda 運算式 |
算術溢位
算術運算子 (+、-、*、/) 會產生相關數字型別 (Numeric Type) 可能值範圍以外的結果。 您應參閱有關特定運算子的章節以取得詳細資料,但一般而言:
整數算術溢位可能會擲回 OverflowException,或是捨棄結果的最大顯著性位元。 除數為零的整數除法一定會擲回 DivideByZeroException。
浮點算術溢位或者是除數為零時,並不會產生例外狀況。因為浮點數型別是根據 IEEE 754 標準所制訂,所以已經提供無限大 (Infinity) 及非數值 (NaN,Not A Number) 狀況的表示方法。
十進位算術溢位一定會擲回 OverflowException。 除數為零的十進位除法一定會擲回 DivideByZeroException。
整數溢位發生時,會導致怎樣的情形要根據執行內容為 checked 或 unchecked 而定。 在 checked 的內容中會擲回 OverflowException。 在 unchecked 的內容中,結果的最大顯著位元會被捨棄,並繼續執行。 所以 C# 給予您處理溢位或忽略溢位的選擇。
除了算術運算子,整數類資料型別 (Integral Type) 間的轉換也可能造成溢位 (例如,將 long 轉換為 int),而且也與 checked 或 unchecked 執行有關。 然而,位元 (Bitwise) 運算子和移位 (Shift) 運算子一定不會造成溢位。