C#運算符大全

一、[]
方括號 ([]) 用於數組、索引器和屬性,也可用於指針。
1、數組類型是一種後跟 [] 的類型:
int[] fib = new int[100]; //創建一個有100元素的數組
若要訪問數組的一個元素,則用方括號括起所需元素的索引:
fib[0] = fib[1] = 1;
for( int i=2; i<100; ++i ) fib[i] = fib[i-1] + fib[i-2];//如果數組索引超出範圍,則會引發異常。
2、不能重載數組索引運算符;但類型可以定義採用一個或多個參數的索引器和屬性。索引器參數括在方括號中(就像數組索引一樣),但索引器參數可聲明爲任何類型(這與數組索引不同,數組索引必須爲整數)。
例如,.NET Framework 定義 Hashtable 類型,該類型將鍵和任意類型的值關聯在一起。
Collections.Hashtable h = new Collections.Hashtable();
h["a"] = 123; // note: using a string as the index
3、方括號還用於指定屬性(C# 編程指南):
[attribute(AllowMultiple=true)]
public class Attr
{
}
4、可以使用方括號來指定指針索引:
unsafe fixed ( int* p = fib )   // p points to fib from earlier example
{
    p[0] = p[1] = 1;
    for( int i=2; i<100; ++i ) p[i] = p[i-1] + p[i-2];
}

二、()
除了用於指定表達式中的運算順序外,圓括號還用於指定強制轉換或類型轉換:
double x = 1234.7;
int a;
a = (int)x; // cast double to int

三、.
點運算符 (.) 用於成員訪問。點運算符指定類型或命名空間的成員。例如,點運算符用於訪問 .NET Framework 類庫中的特定方法:
System.Console.WriteLine("hello");

四、::
命名空間別名限定符運算符 (::),用於查找標識符。它通常放置在兩個標識符之間,例如:
global::System.Console.WriteLine("Hello World");
備註:
命名空間別名限定符可以是 global。這將調用全局命名空間中的查找,而不是在別名命名空間中。
五、+
+ 運算符既可作爲一元運算符也可作爲二元運算符。
備註:
一元 + 運算符是爲所有數值類型預定義的。對數值類型進行一元 + 運算的結果就是操作數的值。
爲數值類型和字符串類型預定義了二元 + 運算符。對於數值類型,+ 計算兩個操作數之和。當其中的一個操作數是字符串類型或兩個操作數都是字符串類型時,+ 將操作數的字符串表示形式串聯在一起。
委託類型也提供二元 + 運算符,該運算符執行委託串聯。
using System;
class MainClass
{
    static void Main()
    {
        Console.WriteLine(+5);        // unary plus
        Console.WriteLine(5 + 5);     // addition
        Console.WriteLine(5 + .5);    // addition
        Console.WriteLine("5" + "5"); // string concatenation
        Console.WriteLine(5.0 + "5"); // string concatenation
        // note automatic conversion from double to string
    }
}

六、-
- 運算符既可作爲一元運算符也可作爲二元運算符。
一元 - 運算符是爲所有數值類型預定義的。數值類型的一元 - 運算的結果是操作數的反數。
二元 - 運算符是爲所有數值類型和枚舉類型預定義的,其功能是從第一個操作數中減去第二個操作數。
委託類型也提供二元 - 運算符,該運算符執行委託移除。
using System;
class MainClass
{
    static void Main()
    {
        int a = 5;
        Console.WriteLine(-a);
        Console.WriteLine(a - 1);
        Console.WriteLine(a - .5);
    }
}

七、*
乘法運算符 (*),用於計算操作數的積。另外還用作取消引用運算符,允許讀取和寫入指針。
備註:
所有數值類型都具有預定義的乘法運算符。
*運算符還用來聲明指針類型和取消引用指針。該運算符只能在不安全的上下文中使用,通過 unsafe 關鍵字的使用來表示,並且需要 /unsafe 編譯器選項。取消引用運算符也稱爲間接尋址運算符。
using System;
class MainClass
{
    static void Main()
    {
        Console.WriteLine(5 * 2);
        Console.WriteLine(-.5 * .2);
        Console.WriteLine(-.5m * .2m); // decimal type
    }
}

八、/
除法運算符 (/) 用第二個操作數除第一個操作數。所有數值類型都具有預定義的除法運算符。
using System;
class MainClass
{
    static void Main()
    {
        Console.WriteLine(-5/2);
        Console.WriteLine(-5.0/2);
    }
}

九、%
模數運算符 (%) 計算第二個操作數除第一個操作數後的餘數。所有數值類型都具有預定義的模數運算符。
using System;
class MainClass
{
    static void Main()
    {
        Console.WriteLine(5 % 2);       // int
        Console.WriteLine(-5 % 2);      // int
        Console.WriteLine(5.0 % 2.2);   // double
        Console.WriteLine(5.0m % 2.2m); // decimal
        Console.WriteLine(-5.2 % 2.0); // double
    }
}

十、&
& 運算符既可作爲一元運算符也可作爲二元運算符。
備註:
一元 & 運算符返回操作數的地址(要求 unsafe 上下文)。
爲整型和 bool 類型預定義了二進制 & 運算符。對於整型,& 計算操作數的邏輯按位“與”。對於 bool 操作數,& 計算操作數的邏輯“與”;也就是說,當且僅當兩個操作數均爲 true 時,結果才爲 true。
& 運算符計算兩個運算符,與第一個操作數的值無關。例如:
int i = 0;
if (false & ++i == 1)
{
}

十一、|
二元 | 運算符是爲整型和 bool 類型預定義的。對於整型,| 計算操作數的按位“或”結果。對於 bool 操作數,| 計算操作數的邏輯“或”結果;也就是說,當且僅當兩個操作數均爲 false 時,結果才爲 false。
using System;
class MainClass
{
    static void Main()
    {
        Console.WriteLine(true | false); // logical or
        Console.WriteLine(false | false); // logical or
        Console.WriteLine("0x{0:x}", 0xf8 | 0x3f);   // bitwise or
    }
}

十二、^
二元 ^ 運算符是爲整型和 bool 類型預定義的。對於整型,^ 將計算操作數的按位“異或”。對於 bool 操作數,^ 將計算操作數的邏輯“異或”;也就是說,當且僅當只有一個操作數爲 true 時,結果才爲 true。
using System;
class MainClass
{
    static void Main()
    {
        Console.WriteLine(true ^ false); // logical exclusive-or
        Console.WriteLine(false ^ false); // logical exclusive-or
        // Bitwise exclusive-or:
        Console.WriteLine("0x{0:x}", 0xf8 ^ 0x3f);
    }
}

十三、!
邏輯非運算符 (!) 是對操作數求反的一元運算符。爲 bool 定義了該運算符,當且僅當操作數爲 false 時才返回 true。
using System;
class MainClass
{
    static void Main()
{
        Console.WriteLine(!true);
        Console.WriteLine(!false);
    }
}

十四、~
~ 運算符對操作數執行按位求補運算,其效果相當於反轉每一位。按位求補運算符是爲 int、uint、long 和 ulong 類型預定義的。
using System;
class MainClass
{
    static void Main()
    {
        int[] values = { 0, 0x111, 0xfffff, 0x8888, 0x22000022};
        foreach (int v in values)
        {
            Console.WriteLine("~0x{0:x8} = 0x{1:x8}", v, ~v);
        }
    }
}

十五、=
賦值運算符 (=) 將右操作數的值存儲在左操作數表示的存儲位置、屬性或索引器中,並將值作爲結果返回。操作數的類型必須相同(或右邊的操作數必須可以隱式轉換爲左邊操作數的類型)。
using System;
class MainClass
{
    static void Main()
    {
        double x;
        int i;
        i = 5; // int to int assignment
        x = i; // implicit conversion from int to double
        i = (int)x; // needs cast
        Console.WriteLine("i is {0}, x is {1}", i, x);
        object obj = i;
        Console.WriteLine("boxed value = {0}, type is {1}",
                  obj, obj.GetType());
        i = (int)obj;
        Console.WriteLine("unboxed: {0}", i);
    }
}

十六、<
所有數值和枚舉類型都定義“小於”關係運算符 (<),如果第一個操作數小於第二個操作數,該運算符返回 true,否則返回 false。
using System;
class MainClass
{
    static void Main()
    {
        Console.WriteLine(1 < 1.1);
        Console.WriteLine(1.1 < 1.1);
    }
}

十七、>
所有數值類型和枚舉類型都定義“大於”關係運算符 >,如果第一個操作數大於第二個操作數,它將返回 true,否則返回 false。
using System;
class MainClass
{
    static void Main()
    {
        Console.WriteLine(1.1 > 1);
        Console.WriteLine(1.1 > 1.1);
    }
}

十八、?:
條件運算符 (?:) 根據布爾型表達式的值返回兩個值中的一個。條件運算符的格式如下
condition ? first_expression : second_expression;
備註:
如果條件爲 true,則計算第一表達式並以它的計算結果爲準;如果爲 false,則計算第二表達式並以它的計算結果爲準。只計算兩個表達式中的一個。
使用條件運算符,可以更簡潔、雅觀地表達那些否則可能要求 if-else 結構的計算。例如,爲在 sin 函數的計算中避免被零除,可編寫爲
if(x != 0.0) s = Math.Sin(x)/x; else s = 1.0;
或使用條件運算符,
s = x != 0.0 ? Math.Sin(x)/x : 1.0;

十九、++
增量運算符 (++) 將操作數加 1。增量運算符可以出現在操作數之前或之後:
備註:
第一種形式是前綴增量操作。該操作的結果是操作數加 1 之後的值。
第二種形式是後綴增量操作。該運算的結果是操作數增加之前的值。
數值類型和枚舉類型具有預定義的增量運算符。用戶定義的類型可重載 ++ 運算符。在枚舉時通常允許整型運算。
// cs_operator_increment.cs
using System;
class MainClass
{
    static void Main()
    {
        double x;
        x = 1.5;
        Console.WriteLine(++x);
        x = 1.5;
        Console.WriteLine(x++);
        Console.WriteLine(x);
    }
}

二十、--
減量運算符 (--) 將操作數減 1。減量運算符可以出現在操作數之前或之後:--variable 和 variable--。第一種形式是前綴減量操作。該運算的結果是操作數減小“之後”的值。第二種形式是後綴減量操作。該運算的結果是操作數減小“之前”的值。
備註:
數值類型和枚舉類型具有預定義的增量運算符。
用戶定義的類型可重載 -- 運算符(請參見運算符)。在枚舉時通常允許整型運算。
// cs_operator_decrement.cs
using System;
class MainClass
{
    static void Main()
    {
        double x;
        x = 1.5;
        Console.WriteLine(--x);
        x = 1.5;
        Console.WriteLine(x--);
        Console.WriteLine(x);
    }
}

二十一、&&
條件“與”運算符 (&&) 執行其 bool 操作數的邏輯“與”運算,但僅在必要時才計算第二個操作數。
備註:
操作
x && y
對應於操作
x & y
不同的是,如果 x 爲 false,則不計算 y(因爲不論 y 爲何值,“與”操作的結果都爲 false)。這被稱作爲“短路”計算。
不能重載條件“與”運算符,但常規邏輯運算符和運算符 true 與 false 的重載,在某些限制條件下也被視爲條件邏輯運算符的重載。
示例
在下面的示例中,請觀察使用 && 的表達式只計算第一個操作數。
using System;
class MainClass
{
    static bool Method1()
    {
        Console.WriteLine("Method1 called");
        return false;
    }

    static bool Method2()
    {
        Console.WriteLine("Method2 called");
        return true;
    }

    static void Main()
    {
        Console.WriteLine("regular AND:");
        Console.WriteLine("result is {0}", Method1() & Method2());
        Console.WriteLine("short-circuit AND:");
        Console.WriteLine("result is {0}", Method1() && Method2());
    }
}

二十二、||
條件“或”運算符 (||) 執行 bool 操作數的邏輯“或”運算,但僅在必要時才計算第二個操作數。
備註:
操作
x || y
對應於操作
x | y
不同的是,如果 x 爲 true,則不計算 y(因爲不論 y 爲何值,“或”操作的結果都爲 true)。這被稱作爲“短路”計算。
不能重載條件“或”運算符,但規則邏輯運算符和運算符 true 與 false 的重載,在某些限制條件下也被視爲條件邏輯運算符的重載。
示例
在下面的示例中,請觀察使用 || 的表達式只計算第一個操作數。
using System;
class MainClass
{
    static bool Method1()
    {
        Console.WriteLine("Method1 called");
        return true;
    }

    static bool Method2()
    {
        Console.WriteLine("Method2 called");
        return false;
    }

    static void Main()
    {
        Console.WriteLine("regular OR:");
        Console.WriteLine("result is {0}", Method1() | Method2());
        Console.WriteLine("short-circuit OR:");
        Console.WriteLine("result is {0}", Method1() || Method2());
    }
}

二十三、<<
左移運算符 (<<) 將第一個操作數向左移動第二個操作數指定的位數。第二個操作數的類型必須是 int。
備註:
如果第一個操作數是 int 或 uint(32 位數),則移位數由第二個操作數的低 5 位給出。
如果第一個操作數是 long 或 ulong(64 位數),則移位數由第二個操作數的低 6 位給出。
第一個操作數的高序位被放棄,低序空位用 0 填充。移位操作從不導致溢出。
用戶定義的類型可重載 << 運算符(請參見 operator);第一個操作數的類型必須爲用戶定義的類型,第二個操作數的類型必須爲 int。重載二元運算符時,也會隱式重載相應的賦值運算符(如果有)。
示例
using System;
class MainClass
{
    static void Main()
    {
        int i = 1;
        long lg = 1;
        Console.WriteLine("0x{0:x}", i << 1);
        Console.WriteLine("0x{0:x}", i << 33);
        Console.WriteLine("0x{0:x}", lg << 33);
    }
}

二十四、>>
右移運算符 (>>) 將第一個操作數向右移動第二個操作數所指定的位數。
備註:
如果第一個操作數爲 int 或 uint(32 位數),則移位數由第二個操作數的低五位給出(第二個操作數 & 0x1f)。
如果第一個操作數爲 long 或 ulong(64 位數),則移位數由第二個操作數的低六位給出(第二個操作數 & 0x3f)。
如果第一個操作數爲 int 或 long,則右移位是算術移位(高序空位設置爲符號位)。如果第一個操作數爲 uint 或 ulong 類型,則右移位是邏輯移位(高位填充 0)。
用戶定義的類型可重載 >> 運算符;第一個操作數的類型必須爲用戶定義的類型,第二個操作數的類型必須爲 int。有關更多信息,請參見 operator。重載二元運算符時,也會隱式重載相應的賦值運算符(如果有)。
示例
using System;
class MainClass
{
    static void Main()
    {
        int i = -1000;
        Console.WriteLine(i >> 3);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章