更新:2007 年 11 月
C# 提供了 Java 支援的所有適用運算子 (如下表所示)。您可以在表格的結尾看到一些可在 C# 中使用、但不能在 Java 中使用的新運算子:
分類 |
符號 |
|---|---|
一元 |
++--+-!~() |
乘法類 (Multiplicative) |
*/% |
加法類 (Additive) |
+ - |
移位 (Shift) |
<< >> |
關係類 |
< > <= >= instanceof |
相等 |
== != |
邏輯 AND |
& |
邏輯 XOR |
^ |
邏輯 OR |
| |
條件式 AND |
&& |
條件式 OR |
|| |
條件式 |
? : |
設定 |
= *= /= %= += -= <<= >>= &= ^= |= |
運算元型別 |
typeof |
運算元大小 |
sizeof |
強制執行溢位檢查 |
checked |
抑制溢位檢查 |
unchecked |
C# 中唯一不支援的 Java 運算子是移位運算子 (>>>)。這個運算子存在於 Java 中是在向右移位時需要在最大顯著性位元插入 1,這個程式語言不提供不帶正負號的變數。
C# 支援不帶正負號的變數,因此,C# 只需要標準的 >> 運算子。這個運算子將依據運算元是否帶正負號而產生不同的結果。向右移位不帶正負號的數字,會在最大顯著性位元中插入 0;向右移位帶正負號的數字,則會複製原本的最大顯著性位元。
Checked 和 Unchecked 運算子
算術運算的結果對於配置給使用中資料型別的位元數而言如果太大,那麼將會發生溢位。使用 checked 和 unchecked 關鍵字的特定整數算術運算,可以檢查或忽略這類的溢位。如果運算式是使用 checked 的常數運算式,那麼在編譯時期便會產生錯誤。
以下是說明這些運算子的簡單範例:
class TestCheckedAndUnchecked
{
static void Main()
{
short a = 10000;
short b = 10000;
short c = (short)(a * b); // unchecked by default
short d = unchecked((short)(10000 * 10000)); // unchecked
short e = checked((short)(a * b)); // checked - run-time error
System.Console.WriteLine(10000 * 10000); // 100000000
System.Console.WriteLine(c); // -7936
System.Console.WriteLine(d); // -7936
System.Console.WriteLine(e); // no result
}
}
在這個程式碼中,unchecked 運算子規避了可能會由以下陳述式造成的編譯時期錯誤:
short d = unchecked((short)(10000 * 10000)); // unchecked
以下的運算式預設為 unchecked,因此值會以無訊息方式發生溢位:
short c = (short)(a * b); // unchecked by default
利用 checked 運算子,我們可以強迫運算式在執行階段執行溢位檢查:
short e = checked((short)(a * b)); // checked - run-time error
如果指派前兩個值給 d 和 c,程式在執行時會以無訊息方式發生溢位,其值為 -7936;不過,當您使用 checked() 嘗試為 e 乘上這個值時,程式將擲回 OverflowException。
注意事項: |
|---|
您也可以使用命令列編譯器參數 (/checked) 來控制是否檢查某一程式碼區塊中的算術溢位,或者是要直接在 Visual Studio 中根據不同的專案來進行檢查。 |
注意事項: