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 之後的值。
第二種形式是字尾增量操作。該運算的結果是運算元增加之前的值。
數值型別和列舉型別具有預定義的增量運算子。使用者定義的型別可過載 ++ 運算子。在列舉時通常允許整型運算。
二十、--
減量運算子 (--) 將運算元減 1。減量運算子可以出現在運算元之前或之後:--variable 和variable--。第一種形式是字首減量操作。該運算的結果是運算元減小“之後”的值。第二種形式是字尾減量操作。該運算的結果是運算元減小“之前”的值。
備註:
數值型別和列舉型別具有預定義的增量運算子。
使用者定義的型別可過載 -- 運算子(請參見運算子)。在列舉時通常允許整型運算。
二十一、&&
條件“與”運算子 (&&) 執行其 bool 運算元的邏輯“與”運算,但僅在必要時才計算第二個運算元。
備註:
操作
x && y
對應於操作
x & y
不同的是,如果 x 為 false,則不計算 y(因為不論 y 為何值,“與”操作的結果都為false)。這被稱作為“短路”計算。
不能過載條件“與”運算子,但常規邏輯運算子和運算子 true 與 false 的過載,在某些限制條件下也被視為條件邏輯運算子的過載。
二十二、||
條件“或”運算子 (||) 執行 bool 運算元的邏輯“或”運算,但僅在必要時才計算第二個運算元。
備註:
操作
x || y
對應於操作
x | y
不同的是,如果 x 為 true,則不計算 y(因為不論 y 為何值,“或”操作的結果都為true)。這被稱作為“短路”計算。
不能過載條件“或”運算子,但規則邏輯運算子和運算子 true 與 false 的過載,在某些限制條件下也被視為條件邏輯運算子的過載。
二十三、<<
左移運算子 (<<) 將第一個運算元向左移動第二個運算元指定的位數。第二個運算元的型別必須是 int。
備註:
如果第一個運算元是 int 或 uint(32 位數),則移位數由第二個運算元的低 5 位給出。
如果第一個運算元是 long 或 ulong(64 位數),則移位數由第二個運算元的低 6 位給出。
第一個運算元的高序位被放棄,低序空位用 0 填充。移位操作從不導致溢位。
使用者定義的型別可過載 << 運算子(請參見 operator);第一個運算元的型別必須為使用者定義的型別,第二個運算元的型別必須為 int。過載二元運算子時,也會隱式過載相應的賦值運算子(如果有)。
二十四、>>
右移運算子 (>>) 將第一個運算元向右移動第二個運算元所指定的位數。
備註:
如果第一個運算元為 int 或 uint(32 位數),則移位數由第二個運算元的低五位給出(第二個運算元 &
0x1f)。
如果第一個運算元為 long 或 ulong(64 位數),則移位數由第二個運算元的低六位給出(第二個運算元 &
0x3f)。
如果第一個運算元為 int 或 long,則右移位是算術移位(高序空位設定為符號位)。如果第一個運算元為 uint 或 ulong 型別,則右移位是邏輯移位(高位填充 0)。
使用者定義的型別可過載 >> 運算子;第一個運算元的型別必須為使用者定義的型別,第二個運算元的型別必須為 int。有關更多資訊,請參見 operator。過載二元運算子時,也會隱式過載相應的賦值運算子(如果有)。
二十五、==
對於預定義的值型別,如果運算元的值相等,則相等運算子 (==) 返回 true,否則返回 false。對於 string 以外的引用型別,如果兩個運算元引用同一個物件,則 == 返回 true。對於string 型別,== 比較字串的值。
備註:
使用者定義的值型別可過載 == 運算子(請參見 operator)。使用者定義的引用型別也可過載 == 運算子,儘管在預設情況下,無論對於預定義的引用型別還是使用者定義的引用型別,== 的行為都與上面描述的相同。如果過載 ==,則還必須過載 !=。在列舉時通常允許整型運算。
二十六、!=
如果運算元相等,則不等運算子 (!=) 返回 false,否則,返回 true。為所有型別(包括字串和物件)預定義了不等運算子。使用者定義的型別可過載 != 運算子。
備註:
對於預定義的值型別,如果運算元的值不同,則不等運算子 (!=) 返回 true,否則,返回false。對於 string 以外的引用型別,如果兩個運算元引用不同的物件,則 != 返回 true。對於 string 型別,!= 比較字串的值。
使用者定義的值型別可過載 != 運算子(請參見 operator)。使用者定義的引用型別也可過載 != 運算子,儘管在預設情況下,無論對於預定義的引用型別還是使用者定義的引用型別,!= 的行為都與上面描述的相同。如果過載 !=,則還必須過載 ==。在列舉時通常允許整型運算。
二十七、<=
所有數值和列舉型別都定義了“小於等於”關係運算子 (<=),如果第一個運算元小於或等於第二個運算元,則該運算子將返回 true,否則返回 false。
二十八、>=
所有數值型別和列舉型別都定義“大於等於”關係運算子 >=,如果第一個運算元大於或等於第二個運算元,該運算子將返回 true,否則返回 false。
二十九、+=
加法賦值運算子。
備註:
使用 += 賦值運算子的表示式,例如
x += y
等效於
x = x + y
不同的是 x 只計算一次。+ 運算子的含義取決於 x 和 y 的型別(例如,對於數值運算元,其含義為相加;對於字串運算元,其含義為串聯)。
不能直接過載 += 運算子,但使用者定義的型別可以過載 + 運算子(請參見 operator)。
三十、-=
減法賦值運算子。
備註:
使用 -= 賦值運算子的表示式,如
x -= y
等效於
x = x - y
不同的是 x 只計算一次。- 運算子的含義取決於 x 和 y 的型別(例如,對於數值運算元,其含義為相減;對於委託運算元,其含義為移除)。
不能直接過載 -= 運算子,但使用者定義的型別可過載 - 運算子(請參見 operator)。
三十一、*=
二元乘法賦值運算子。
備註:
使用 *= 賦值運算子的表示式,如
x *= y
等效於
x = x * y
不同的是 x 只計算一次。為數值型別預定義了 * 運算子以執行乘法操作。
不能直接過載 *= 運算子,但使用者定義的型別可過載 * 運算子(請參見 operator)。
三十二、/=
除法賦值運算子。
備註:
使用 /= 賦值運算子的表示式,如
x /= y
等效於
x = x / y
不同的是 x 只計算一次。為數值型別預定義了 / 運算子以執行除法操作。
不能直接過載 /= 運算子,但使用者定義的型別可過載 / 運算子(請參見 operator)。對於所有複合賦值運算子,隱式過載二元運算子會過載等效的複合賦值。
三十三、%=
模組賦值運算子。
備註:
使用 %= 賦值運算子的表示式,如
x %= y
等效於
x = x % y
不同的是 x 只計算一次。為數值型別預定義了 % 運算子,以計算相除後的餘數。
不能直接過載 %= 運算子,但使用者定義的型別可過載 % 運算子(請參見運算子(C# 參考))。
三十四、&=
“與”賦值運算子。
備註:
使用 &= 賦值運算子的表示式,如
x &= y
等效於
x = x & y
不同的是 x 只計算一次。& 運算子對整數運算元執行按位邏輯“與”運算,對 bool 運算元執行邏輯“與”運算。
不能直接過載 &= 運算子,但使用者定義的型別可過載二元 & 運算子(請參見 operator)。
三十五、|=
“或”賦值運算子。
備註:
使用 |= 賦值運算子的表示式,例如
x |= y
等效於
x = x | y
不同的是 x 只計算一次。| 運算子對整型運算元執行按位邏輯“或”運算,對布林運算元執行邏輯“或”運算。
不能直接過載 |= 運算子,但使用者定義的型別可以過載 | 運算子(請參見 operator)。
三十六、^=
“異或”賦值運算子。
備註:
下列形式的表示式
x ^= y
按如下規則計算:
x = x ^ y
不同的是 x 只計算一次。^ 運算子對整數運算元執行按位“異或”運算,對 bool 運算元執行邏輯“異或”運算。
不能直接過載 ^= 運算子,但使用者定義的型別可過載 ! 運算子(請參見 operator)。
三十七、<<=
左移賦值運算子。
備註:
下列形式的表示式
x <<= y
按如下規則計算:
x = x << y
不同的是 x 只計算一次。<< 運算子將 x 向左移動 y 指定的位數。
不能直接過載 <<= 運算子,但使用者定義的型別可過載 << 運算子(請參見 operator)。
三十八、>>=
右移賦值運算子。
備註:
下列形式的表示式
x >>= y
按如下規則計算:
x = x >> y
不同的是 x 只計算一次。>> 運算子根據 y 指定的量對 x 進行右移位。
不能直接過載 >>= 運算子,但使用者定義的型別可過載 >> 運算子(請參見 operator)。
三十九、->
-> 運算子將指標取消引用與成員訪問組合在一起。
備註:
以下形式的表示式
x->y
(其中 x 為 T* 型別的指標,y 為 T 的成員)等效於
(*x).y
-> 運算子只能在非託管程式碼中使用。
不能過載 -> 運算子。
四十、??
如果 ?? 運算子的左運算元非空,該運算子將返回左運算元,否則返回右運算元。
備註:
可空型別可以包含值,或者可以是未定義的。?? 運算子定義當可空型別分配給非可空型別時返回的預設值。如果在將可空型別分配給非可空型別時不使用 ?? 運算子,將生成編譯時錯誤。如果使用強制轉換,並且當前未定義可空型別,將發生 InvalidOperationException 異常。
示例
相關文章
- MySQL的四種運算子(算術運算子、比較運算子、邏輯運算子和位運算子)MySql
- Linux 各種運算子Linux
- javascript中&&運算子和||運算子的使用JavaScript
- 運算子 運算子
- C# ?問號運算子知多少C#
- javascript運算子——條件、逗號、賦值、()和void運算子JavaScript賦值
- 8.Golang中的運算子-算術運算子、關係運算子、邏輯運算子、賦值運算子Golang賦值
- php運算子 比較運算子 邏輯運算子 三元運算子PHP
- 運算子-賦值運算子賦值
- JavaScript (+) 正號運算子JavaScript
- JavaScript + 正號運算子JavaScript
- JavaScript == 等號運算子JavaScript
- JavaScript - 負號運算子JavaScript
- C#中的?.和!.運算子(連結)C#
- Java的&運算子作用於boolean運算元JavaBoolean
- 運算子的關係,什麼叫一元運算子,二元運算子,三元運算子,運算子優先順序,以及運算子的
- java短路運算子和邏輯運算子的區別Java
- Python學習-算術運算子,賦值運算子和複合運算子Python賦值
- PHP7 ?? 與 ?: 的作用和區別(null合併運算子, null條件運算子)PHPNull
- javascript運算子——邏輯運算子JavaScript
- 瞭解下C# 運算子C#
- C# 運算子過載C#
- 算術運算子裡的特殊運算子
- Java 運算子 % 和 /Java
- javascript基礎(賦值運算子,關係運算子,相等運算子,三元運算子,運算子的優先順序,程式碼塊)(十)JavaScript賦值
- 運算子
- java零基礎自學第一天②,運算子:表示式,算術運算子,+操作,賦值運算子,自增自減運算子,關係運算子,邏輯運算子,三元運算子Java賦值
- C# ~按位取反運算子C#
- C#學習 運算子(20)C#
- Python學習-比較運算子和邏輯運算子Python
- 變數和運算子變數
- JavaScript >> 有符號右移運算子JavaScript符號
- JavaScript 等號 = 賦值運算子JavaScript賦值
- php運算子運用之型別運算子該如何使用PHP型別
- Java中的三種位移運算子Java
- Python 運算子優先順序 運算子Python
- C++ 迭代器運算子 箭頭運算子->C++
- Java的運算子Java