天天看點

C#、表達式、運算符

1. 什麼是表達式?

表達式是由運算符和操作數組組成的。運算符設定對操作數進行什麼樣的運算。

C#、表達式、運算符

1. 什麼是算術運算符?

運算符是一種告訴編譯器執行特定的數學或邏輯操作的符号。C# 有豐富的内置運算符,分類如下:

  • 算術運算符
  • 關系運算符
  • 邏輯運算符
  • 位運算符
  • 指派運算符
  • 其他運算符

算術運算符

下表顯示了 C# 支援的所有算術運算符。假設變量 A 的值為 10,變量 B 的值為 20,則:

+ 把兩個操作數相加 A + B 将得到 30
- 從第一個操作數中減去第二個操作數 A - B 将得到 -10
* 把兩個操作數相乘 A * B 将得到 200
/ 分子除以分母 B / A 将得到 2
% 取模運算符,整除後的餘數 B % A 将得到 0
++ 自增運算符,整數值增加 1 A++ 将得到 11
-- 自減運算符,整數值減少 1 A-- 将得到 9

關系運算符

關系運算符可以實作兩個值得比較運算,關系運算符在完成兩個操作數的比較運算之後會傳回一個代表運算結果的bool值。

下表顯示了 C# 支援的所有關系運算符。假設變量 A 的值為 10,變量 B 的值為 20,則:

== 檢查兩個操作數的值是否相等,如果相等則條件為真。 (A == B) 不為真。
!= 檢查兩個操作數的值是否相等,如果不相等則條件為真。 (A != B) 為真。
> 檢查左操作數的值是否大于右操作數的值,如果是則條件為真。 (A > B) 不為真。
< 檢查左操作數的值是否小于右操作數的值,如果是則條件為真。 (A < B) 為真。
>= 檢查左操作數的值是否大于或等于右操作數的值,如果是則條件為真。 (A >= B) 不為真。
<= 檢查左操作數的值是否小于或等于右操作數的值,如果是則條件為真。 (A <= B) 為真。

邏輯運算符

下表顯示了 C# 支援的所有邏輯運算符。假設變量 A 為布爾值 true,變量 B 為布爾值 false,則:

&& 稱為邏輯與運算符。如果兩個操作數都非零,則條件為真。 (A && B) 為假。
|| 稱為邏輯或運算符。如果兩個操作數中有任意一個非零,則條件為真。 (A || B) 為真。
! 稱為邏輯非運算符。用來逆轉操作數的邏輯狀态。如果條件為真則邏輯非運算符将使其為假。 !(A && B) 為真。

1. 什麼是指派運算符?

指派運算符為變量,屬性,事件等元素賦新值。指派運算符的左操作數必須為變量,屬性通路,索引器通路或事件通路類型的表達式,如果指派運算符兩邊的操作數的類型不一緻,就需要首先進行類型的轉換。然後再指派。

在使用指派運算符時,右操作表達數所屬的類型必須可隐式轉換為左操作數所屬的類型,運算将右操作數的值指派給左操作數指定的變量,屬性或索引器元素。

下表列出了 C# 支援的指派運算符:

= 簡單的指派運算符,把右邊操作數的值賦給左邊操作數 C = A + B 将把 A + B 的值賦給 C
+= 加且指派運算符,把右邊操作數加上左邊操作數的結果指派給左邊操作數 C += A 相當于 C = C + A
-= 減且指派運算符,把左邊操作數減去右邊操作數的結果指派給左邊操作數 C -= A 相當于 C = C - A
*= 乘且指派運算符,把右邊操作數乘以左邊操作數的結果指派給左邊操作數 C *= A 相當于 C = C * A
/= 除且指派運算符,把左邊操作數除以右邊操作數的結果指派給左邊操作數 C /= A 相當于 C = C / A
%= 求模且指派運算符,求兩個操作數的模指派給左邊操作數 C %= A 相當于 C = C % A
<<= 左移且指派運算符 C <<= 2 等同于 C = C << 2
>>= 右移且指派運算符 C >>= 2 等同于 C = C >> 2
&= 按位與且指派運算符 C &= 2 等同于 C = C & 2
^= 按位異或且指派運算符 C ^= 2 等同于 C = C ^ 2
|= 按位或且指派運算符 C |= 2 等同于 C = C | 2

1. 其他運算符?

sizeof() 傳回資料類型的大小。 sizeof(int),将傳回 4.
typeof() 傳回 class 的類型。 typeof(StreamReader);
& 傳回變量的位址。 &a; 将得到變量的實際位址。
* 變量的指針。 *a; 将指向一個變量。
? : 條件表達式 如果條件為真 ? 則為 X : 否則為 Y
is 判斷對象是否為某一類型。 If( Ford is Car) // 檢查 Ford 是否是 Car 類的一個對象。
as 強制轉換,即使轉換失敗也不會抛出異常。

Object obj = new StringReader("Hello");

StringReader r = obj as StringReader;

1 is運算符

is運算符用于檢測變量是否為指定的類型,如果是,傳回真。否則傳回假。

C#、表達式、運算符

2 new運算符

new運算符用于建立一個新的類型執行個體,它有以下三種形式。

一.對象建立表達式,用于建立一個類類型或值類型的執行個體。

二.數組建立表達式,用于建立一個數組類型執行個體。

三.代表建立表達式,用于建立一個新的代表類型執行個體。

3 typeof運算符

typeof運算符用于擷取系統原型對象的類型,也就是Type對象。Type類包含關于值類型和引用類型的資訊。typeof運算符可以在C#語言中各種位置使用,以找出關于引用類型和值類型的資訊。

C#、表達式、運算符

1. 運算符優先級?

運算符的優先級确定表達式中項的組合。這會影響到一個表達式如何計算。某些運算符比其他運算符有更高的優先級,例如,乘除運算符具有比加減運算符更高的優先級。

例如 x = 7 + 3 * 2,在這裡,x 被指派為 13,而不是 20,因為運算符 * 具有比 + 更高的優先級,是以首先計算乘法 3*2,然後再加上 7。

下表将按運算符優先級從高到低列出各個運算符,具有較高優先級的運算符出現在表格的上面,具有較低優先級的運算符出現在表格的下面。在表達式中,較高優先級的運算符會優先被計算。

類别  運算符  結合性 
字尾  () [] -> . ++ - -   從左到右 
一進制  + - ! ~ ++ - - (type)* & sizeof  從右到左 
乘除  * / %  從左到右 
加減  + -  從左到右 
移位  << >>  從左到右 
關系  < <= > >=  從左到右 
相等  == !=  從左到右 
位與 AND  從左到右 
位異或 XOR  從左到右 
位或 OR  從左到右 
邏輯與 AND  &&  從左到右 
邏輯或 OR  ||  從左到右 
條件  ?:  從右到左 
指派  = += -= *= /= %=>>= <<= &= ^= |=  從右到左 
逗号  從左到右