◆本章簡述
表達式在C#程序中應用廣泛,尤其是在計算功能中,往往需要大量的表達式。而大多數表達式都使用運算符,運算符結合一個或一個以上的操作數,便形成了表達式,並且返回運算結果。本章將對C#中的表達式與運算符進行詳細講解。
◆本章內容
(1)了解什么是表達式
(2)熟悉算術運算符的使用
(3)掌握賦值運算符
(4)掌握如何使用關系運算符
(5)掌握邏輯運算符的使用方法
(6)掌握如何對變量進行位操作
(7)掌握其他特殊運算符的使用方法
(8)熟悉運算符的優先級順序
◆知識框架
4.1 表達式
表達式是由運算符和操作數組成的。運算符設置將對操作數進行什么樣的運算?例如,“+”“-”“*”和“/”都是運算符,操作數包括文本、常量、變量和表達式等。
例如,下面幾行代碼就是簡單的表達式。
int i = 927;//聲明一個int類型的變量i並初始化為927 i = i * i + 112;//改變變量i的值 int j = 2020;//聲明一個int類型的變量j並初始化為2020 j = j / 2;//改變變量j的值
在C#中,如果表達式最終的計算結果為所需的類型值,表達式就可以出現在需要值或對象的任意位置。
[例4.1]創建一個控制台應用程序,聲明兩個int類型的變量i和j,並將其分別初始化為927和112,然后輸出i*i+j*j的正弦值,代碼如下。
int i = 927;//聲明一個int類型的變量i並初始化為927 int j = 112;//聲明一個int類型的變量j並初始化為112 Console.WriteLine(Math.Sin(i * i + j * j));//表達式作為參數輸出 Console.ReadLine();
程序的運行結果為:
在上面的代碼中,表達式i*i+j*j作為方法Math.Sin的參數來使用,同時,表達式Math.Sin(i*i+j*j)還是方法Console.WriteLine的參數。
4.2 運算符
運算符是一些特殊的符號,主要用於數學函數、一些類型的賦值語句和邏輯比較方面。C#中提供了豐富的運算符,如算術運算符、賦值運算符、比較運算符等。本節將向讀者介紹這些運算符。
4.2.1 算術運算符
“+”“-”“*”“/”和“%”運算符都稱為算術運算符,分別用於進行加、減、乘、除和模(求余數)運算。C#中的算術運算符的功能及使用方式如表4.1所示。
表4.1 C#中的算術運算符的功能及使用方法 |
|||
運算符 |
說明 |
實例 |
結果 |
+ |
加 |
12.45f+15 |
27.45 |
- |
減 |
4.56-0.16 |
4.4 |
* |
乘 |
5L*12.45f |
62.25 |
/ |
除 |
7/2 |
3 |
% |
取余數 |
12%10 |
2 |
其中,“+”和“-”運算符還可以作為數據的正負符號,如+5、-7。
說明:算術運算的結果類型取決於操作數類型。例如,表達式5.0/2.0的值是2.5。兩個操作數的類型均是double,結果也是double。(在C#中,帶小數點的字面值肯定是double值,而不是float值,目的是保留盡可能高的精度。)但表達式5/2的結果是2。兩個操作數的類型均是int,結果也是int。C#在這種情況下總是對值進行向下取整。另外,混用不同的操作數類型,情況會變得更復雜。例如,表達式5/2.0包含int值和double值。C#編譯器檢測到這種不一致的情況,自動生成代碼將int轉換成double再執行計算。所以,以上表達式的結果是double值(2.5)。能這樣寫,但不建議。
1. 加法運算符
加法運算符(+)通過兩個數相加來執行標准的加法運算。
[例4.2]創建一個控制台應用程序,聲明兩個整型變量numl和num2,並將numl賦值為927,然后使num2的值為num1與num1相加之后的值,代碼如下。
static void Main(string[] args) { int num1 = 927;//聲明整型變量num1,並賦值為927 int num2;//聲明整型變量num2 num2 = num1 + num1;//num2的值為num1與num1相加之后的值 Console.WriteLine(num2.ToString()); Console.Read(); }
程序的運行結果為:
說明:如果想要對整型變量num進行加1操作,可以用“num= num+1;”來實現,也可以用增量運算符(++)實現,如num++或++num。++num是前綴增量操作,該操作的結果是操作數加1之后的值;num++是后綴增量操作,該運算的結果是操作數增加之前的值。
2. 減法運算符
減法運算符(-)通過從一個表達式中減去另一個表達式的值來執行標准的減法運算。
[例4.3]創建一個控制台應用程序,聲明兩個decimal類型變量numl和num2,並分別賦值為1112.82和9270.81,然后再聲明一個decimal類型變量num3,使其值為num2減去numl之后得到的值,代碼如下。
static void Main(string[] args) { decimal num1 = (decimal)1112.82;//聲明整型變量num1,並賦值為1112.82 decimal num2 = (decimal)9270.81;//聲明整型變量num2,井賦值為9270.81 decimal num3;//聲明整型變量num3 num3 = num2 - num1;//num3的值為num2減去num1得到的值 Console.WriteLine(num3.ToString()); Console.Read(); }
程序的運行結果為:
說明:如果想要對整型變量num進行減1操作,可以用“num=num-1;”來實現,也可以用減量運算符(--)實現,如num--或--num。--num是前綴減量操作,該操作的結果是操作數減1之后的值;num--是后綴減量操作,該運算的結果是操作數減少之前的值。
3. 乘法運算符
乘法運算符(*)將兩個表達式進行乘法運算並返回它們的乘積。
[例4.4]創建一個控制台應用程序,聲明兩個整型變量numl和num2,並分別賦值為10和20。再聲明一個整型變量sum,使其值為numl和num2的乘積,代碼如下。
static void Main(string[] args) { int num1 = 10;//聲明整型變量num1,並賦值為10 int num2 = 20;//聲明整型變量num2,並賦值為20 int sum;//聲明整型變量sum sum = num1 * num2;//使sum的值為num1和num2的乘積 Console.WriteLine(sum.ToString()); Console.Read(); }
程序的運行結果為:
4. 除法運算符
除法運算符(/)執行算術除運算,它用被除數表達式除以除數表達式而得到商。
[例4.5]創建一個控制台應用程序,聲明兩個整型變量numl和num2,並分別賦值為45和5。再聲明一個整型變量result,使其值為num1除以num2得到的值,代碼如下。
static void Main(string[] args) { int num1 = 45;//聲明整型變量num1,並賦值為45 int num2 = 5;//聲明整型變量num2,井賦值為5 int result;//聲明整型變量result result = num1 / num2;//使result的值為num1除以num2得到的值 Console.WriteLine(result.ToString()); Console.Read(); }
程序的運行結果為:
注意:在用算術運算符(+、-、*、/) 運算時,產生的結果可能會超出所涉及數值類型的值的范圍,這樣,會導致運行結果不正確。
5. 求余運算符
求余運算符(%)返回除數與被除數相除之后的余數,通常用這個運算符來創建余數在特定范圍內的等式。
[例4.6]創建一個控制台應用程序,聲明兩個整型變量numl和num2,並分別賦值為55和10。再聲明一個整型變量result,使其值為num1與mum2求余運算之后的值,代碼如下。
static void Main(string[] args) { int num1 = 55;//聲明整型變量num1,井賦值為55 int num2 = 10;//聲明整型變量num2,井賦值為10 int result;//聲明整型變量result result = num1 % num2;//使result等於num1與num2求余運算之后的值 Console.WriteLine(result.ToString()); Console.Read(); }
程序的運行結果為:
說明:在獲取兩個數相除的余數時,也可以用Math類的DivRem()方法來實現,如上述代碼中的resut = numl % num2可以寫成Math.DivRem(num1,num2,out resut),result中存儲了num1和num2的余數。
闖關訓練:根據4.2.1節所學知識,制作一個簡易的計算器程序,可以實現兩個數的加、減、乘、除運算。
6. 數值類型和無窮大
C#語言的數字還有另兩個特性是你必須了解的。例如,任何數除以0所得的結果是無窮大,超出了int,long和decimal類型的范圍。所以,計算5/0這樣的表達式會出錯,但double和float類型實際上有一個可以表示無窮大的特殊值,因此表達式5.0/0.0的值是Infinity(無窮大)。該規則唯一的例外是表達式0.0/0.0。通常,如果0除以任何數,結果都是0,但任何數除以0結果是無窮大。表達式0.0/0.0會陷入一種自相矛盾的境地:值既是0,又是無窮大。針對這種情況,C#語言提供了另一個值NaN,即“not anumber”。所以,如果計算表達式0.0/0.0,則結果為NaN。NaN和Infinity可在表達式中使用。計算10+NaN,結果是NaN。計算10+Infinity,結果是Infinity。規則唯一的例外是Infinity*0,結果是0。而NaN*0的結果仍是NaN。
4.2.2 賦值運算符
賦值運算符為變量、屬性、事件等元素賦新值。賦值運算符主要有:“=”“+=”“-=”“*=”“/=”“%=”“&="“|=”“^=”“<<=”和“>>=”運算符。賦值運算符的左操作數必須是變量、屬性訪問、索引器訪問或事件訪問類型的表達式,如果賦值運算符兩邊的操作數的類型不一致,就需要首先進行類型轉換,然后再賦值。
在使用賦值運算符時,右操作數表達式所屬的類型必須可隱式轉換為左操作數所屬的類型,運算將右操作數的值賦給左操作數指定的變量、屬性或索引器元素。C#中的賦值運算符及其運算規則如表4.2所示。
表4.2 C#中的賦值運算符及其運算規則 |
|||
名稱 |
運算符 |
運算規則 |
意義 |
賦值 |
= |
將表達式賦值給變量 |
將右邊的值給左邊 |
加賦值 |
+= |
x+=y |
x=x+y |
減賦值 |
-= |
x-=y |
x=x-y |
除賦值 |
/= |
x/=y |
x=x/y |
乘賦值 |
*= |
x*=y |
x=x*y |
模賦值 |
%= |
x%=y |
x=x%y |
位與賦值 |
&= |
x&=y |
x=x&y |
位或賦值 |
|= |
x|=y |
x=x|y |
右移賦值 |
>>= |
x>>=y |
x=x>>y |
左移賦值 |
<<= |
x<<=y |
x=x<<y |
異或賦值 |
^= |
x^=y |
x=x^y |
下面以加賦值(+=)運算符為例,舉例說明賦值運算符的用法。
[例4.7]創建一個控制台應用程序,聲明一個int類型的變量i,並初始化為927。然后通過加賦值運算符改變i的值,使其在原有的基礎上增加112,代碼如下。
static void Main(string[] args) { int i = 927;//聲明一個int類型的變量i並初始化為927 i += 112;//使用加賦值運算符 Console.WriteLine("最后i的值為:{0}", i);//輸出最后變量i的值 Console.ReadLine(); }
程序的運行結果為:
說明:在C#中可以把賦值運算符連在一起使用。如:
x=y=z=5;
在這個語句中,變量x、y. z都得到同樣的值5,但在程序開發中不建議使用這種賦值語法。
4.2.3 關系運算符
關系運算符屬於二元運算符,用於程序中的變量之間、變量和自變量之間以及其他類型的信息之間的比較,它返回一個代表運算結果的布爾值。當運算符對應的關系成立時,運算結果為true,否則為false。所有關系運算符通常用在條件語句中來作為判斷的依據。C#中的關系運算符共有6個,如表4.3 所示。
表4.3關系運算符 |
||||
運算符 |
作用 |
舉例 |
操作數據 |
結果 |
> |
比較左方是否大於右方 |
‘a’>‘b’ |
整型、浮點型、字符型 |
false |
< |
比較左方是否小於右方 |
156<456 |
整型、浮點型、字符型 |
true |
== |
比較左方是否等於右方 |
‘c’==‘c’ |
基本數據類型、引用型 |
true |
>= |
比較左方是否大於或等於右方 |
479>=426 |
整型、浮點型、字符型 |
true |
<= |
比較左方是否小於或等於右方 |
12.45<=45.5 |
整型、浮點型、字符型 |
true |
!= |
比較左方是否不等於右方 |
‘y’!=‘t’ |
基本數據類型、引用型 |
true |
關系運算符就好像對兩個鐵球進行比較,看看這兩個鐵球哪個大,重量是否相等,並給出一個“ 真”或“假”的值。
下面對這幾種關系運算符進行詳細講解。
1. 相等運算符
要查看兩個表達式是否相等,可以使用相等運算符(==)。相等運算符對整型、浮點型和枚舉類型數據的操作是一樣的。 它只簡單地比較兩個表達式,並返回一個布爾結果。
[例4.8]創建一個控制台應用程序,聲明兩個decimal類型變量num1和num2,並分別賦值為1981.00m和1982.00m,然后再聲明一個bool類型變量result,使其值等於num1和num2進行相等運算后的返回值,代碼如下。
static void Main(string[] args) { decimal num1 = 1981.00m;//聲明decimal類型變量num1 decimal num2 = 1982.00m;//聲明decimal類型變量num2 bool result;//聲明bool類型變量result result = num1 == num2;//使result等於num1和num2進行相等運算后的返回值 Console.WriteLine(result);//輸出運行結果 Console.ReadLine(); }
程序的運行結果為:
2. 不等運算符
不等運算符(!=)是與相等運算符相反的運算符,有兩種格式的不等運算符可以應用到表達式,一種是普通的不等運算符(!=);另一種是相等運算符的否定“!(a==b)”。 通常,這兩種格式可以計算出相同的值。
[例4.9]創建一個控制台應用程序, 聲明兩個decimal類型變量num1和num2,並分別賦值為1981.00m和1982.00m,然后再聲明兩個bool類型變量result和result1,使它們的值分別等於兩種不等運算返回的值,代碼如下。
static void Main(string[] args) { decimal num1 = 1981.00m;//聲明decimal類型變量num1 decimal num2 = 1982.00m;//聲明decimal類型變量num2 bool result;//聲明bool類型變量result bool result1;//聲明bool 類型變量result1 result = num1 != num2;//獲取不等運算返回值第一種方法 result1 = !(num1 == num2);//獲取不等運算返回值第二種方法 Console.WriteLine(result);//輸出結果 Console.WriteLine(result1);//輸出結果 Console.ReadLine(); }
程序的運行結果為:
3. 小於運算符
如果要比較一個值是否小於另一個值,可以使用小於運算符(<)。當左邊的表達式的值小於右邊表達式的值時,結果是真;否則,結果是假。
[例4.10]創建一個控制台應用程序,聲明兩個整型變量num1和num2,並分別賦值為1112和927,再聲明一個bool類型變量result,使其值等於num1和num2進行小於運算的返回值,代碼如下。
static void Main(string[] args) { int num1 = 1112;//聲明整型變量num1 int num2 = 927;//聲明整型變量num2 bool result;//聲明bool類型變量result result = num1 < num2;//使result等於num1和num2進行小於運算的返回值 Console.WriteLine(result);//輸出結果 Console.ReadLine(); }
程序的運行結果為:
說明:在用小於或大於運算符對值進行判斷時,如果把判斷符左右兩邊的值進行調換,其判斷的結果也會隨之改變。
4. 大於運算符
如果比較一個值是否大於另一個值,可以使用大於運算符(>)。當左邊的表達式的值大於右邊的表達式的值時,結果是真;否則,結果是假。
[例4.11]創建一個控制台應用程序,聲明兩個整型變量numl和num2,並分別賦值為18和8,再聲明一個bool類型變量result,使其值等於num1和num2進行大於運算的返回值,代碼如下。
static void Main(string[] args) { int num1 = 18;//聲明整型變量num1 int num2 = 8;//聲明整型變量num2 bool result;//聲明bool類型變量result result = num1 > num2;//使result等於num1和num2進行大於運算的返回值 Console.WriteLine(result);//輸出結果 Console.ReadLine(); }
程序的運行結果為:
5. 小於或等於運算符
如果要比較一個值是否小於或等於另一個值,可以使用小於或等於運算符(<=)。當左邊表達式的值小於或等於右邊表達式的值時,結果是真;否則,結果是假。
[例4.12]創建一個控制台應用程序,聲明兩個整型變量num1和num2,並分別賦值為12和9,然后再聲明一個bool類型變量result,使其值等於numl和num2進行小於或等於運算的返回值,代碼如下。
static void Main(string[] args) { int num1 = 12;//聲明整型變量num1 int num2 = 9;//聲明整型變量num2 bool result;//聲明bool類型變量result result = num2 <= num1; //使result等於num1和num2進行小於或等於運算的返回值 Console.WriteLine(result);//輸出結果 Console.ReadLine(); }
程序的運行結果為:
6. 大於或等於運算符
大於或等於運算符(>=)用於查看某個值是否大於或等於另一個值。當運算符左邊表達式的值大於或等於右邊表達式的值時,結果是真;否則,結果是假。
[例4.13]創建一個控制台應用程序,聲明兩個整型變量numl和num2,並分別賦值為1112和927,再聲明一個bool類型變量resut,使其值等於num1和num2進行大於或等於運算的返回值,代碼如下。
static void Main(string[] args) { int num1 = 1112;//聲明整型變量num1 int num2 = 927;//聲明整型變量num2 bool result;//聲明bool類型變量result result = num2 >= num1; //使result等於num1和num2進行大於或等於運算的返回值 Console.WriteLine(result);//輸出結果 Console.ReadLine(); }
程序的運行結果為:
說明:關系運算符一般常用於判斷或循環語句中。
4.2.4 邏輯運算符
返回類型為布爾值的表達式,如關系運算符,可以被組合在一起構成一個更復雜的表達式,這是通過邏輯運算符來實現的。C#中的邏輯運算符主要包括“&(&&)(邏輯與)”“|(||)(邏輯或)”“!(邏輯非)”。邏輯運算符的操作元必須是bool型數據。在邏輯運算符中,除了“!”是一元運算符之外,其他都是二元運算符。表4.4給出了邏輯運算符的用法和含義。
表4.4邏輯運算符的用法和含義 |
|||
運算符 |
含義 |
用法 |
結合方向 |
&&、& |
邏輯與 |
op1&&op2 |
左到右 |
||、| |
邏輯或 |
op1||op2 |
左到右 |
! |
邏輯非 |
!op |
右到左 |
結果為bool類型的變量或表達式可以通過邏輯運算符組合為邏輯表達式。
用邏輯運算符進行邏輯運算時,結果如表4.5所示。
表4.5使用邏輯運算符進行邏輯運算 |
||||
表達式1 |
表達式2 |
表達式1&&表達式2 |
表達式1||表達式2 |
!表達式1 |
true |
true |
true |
true |
false |
true |
false |
false |
true |
false |
false |
false |
false |
false |
true |
false |
true |
false |
true |
true |
邏輯運算符“&&”與“&”都表示“邏輯與”,那么它們之間的區別在哪里呢?從表4.5可以看出,當兩個表達式都為true時,邏輯與的結果才會是true。使用邏輯運算符“&”會判斷兩個表達式;而邏輯運算符“&&”則是針對bool類型的類進行判斷,當第一個表達式為false時則不去判斷第二個表達式,直接輸出結果從而節省計算機判斷的次數。通常將這種在邏輯表達式中從左端的表達式可推斷出整個表達式的值稱為“短路”,而那些始終執行邏輯運算符兩邊的表達式稱為“非短路”。“&&”屬於“短路”運算符,而“&”則屬於“非短路”運算符。“||”與“|”的區別跟“&&”與“&”的區別類似。
[例4.14]創建一個控制台應用程序,在Main()方法中創建整型變量,使用邏輯運算符對變量進行運算,並將運算結果輸出。
static void Main(string[] args) { int a = 2;//聲明int型變量a int b = 5;//聲明int型變量b bool result = ((a > b) && (a != b));//聲明boolean型變量,用於保存應用邏輯運算符“&&”后的返回值 bool result2 = ((a > b) || (a != b));//聲明boolean型變量,用於保存應用邏輯運算符“||”后的返回值 Console.WriteLine(result);//將變量result輸出 Console.WriteLine(result2);//將變量result2輸出 }
程序的運行結果為:
4.2.5 位運算符
位運算符除按位與、按位或運算符外,其他只能用於處理整數的操作數。位運算是完全針對位方面的操作。整型數據在內存中以二進制的形式表示,如int型變量7的二進制表示是00000000 00000000 00000000 00000111。
左邊最高位是符號位,最高位是0表示正數,若為1則表示負數。負數采用補碼表示,如1-8 的二進制表示為11111111 11111111 11111111 11111000這樣就可以對整型數據進行按位運算。
1. “按位與”運算
“按位與”運算的運算符為“&”,“按位與”運算的運算法則是:如果兩個整型數據a、b對應位都是1,則結果位才是1;否則結果為0。如果兩個操作數的精度不同,則結果的精度與精度高的操作數相同,如圖4.1所示。
2. “按位或”運算
“按位或”運算的運算符為“|”, “按位或”運算的運算法則是:如果兩個操作數對應位都是0,則結果位才是0;否則結果為1。如果兩個操作數的精度不同,則結果的精度與精度高的操作數相同,如圖4.2所示。
3. “按位取反”運算
“按位取反”運算也稱“按位非”運算,運算符為“~”,為一元運算符。“按位取反”就是將操作數二進制中的1修改為0,0修改為1,如圖4.3所示。
4. “按位異或”運算
“按位異或”運算的運算符是“^”,“按位異或”運算的運算法則是:當兩個操作數的二進制表示相同(同時為0或同時為1)時,結果為0;否則結果為1。若兩個操作數的精度不同,則結果數的精度與精度高的操作數相同,如圖4.4所示。
5. 移位操作
除了上述位運算符之外,還可以對數據按二進制位進行移位操作。C#中的移位運算符有以下兩種。
<<:左移。
>>:右移。
對於X<<N或X>>N形式的運算,含義是將X向左或向右移動N位,得到的結果的類型與X相同。在此處,X的類型只能是int、uint、long或ulong,N的類型只能是int,或者顯示轉換為這些類型之一,否則編譯程序時會出現錯誤。具體執行時,左移就是將左邊的操作數在內存中的二進制數據左移右邊操作數指定的位數,右邊移空的部分補0。右移則復雜一些。 當使用“>>”運算符時,如果最高位是0,左移空的位就填入0;如果最高位是1,左移空的位就填入1,如圖4.5所示。
移位可以實現整數除以或乘以2的n次方的效果。例如,y<<2與y*4的結果相同; y>>l 的結果與y/2的結果相同。總之,一個數左移n位,就是將這個數乘以2的n次方;一個數右移n位,就是將這個數除以2的n次方。
[例4.15]創建一個控制台應用程序,使變量intmax向左移位8次,並輸出結果,代碼如下。
static void Main(string[] args) { uint intmax = 8;//聲明uint類型變量intmax uint bytemask;//聲明uint類型變量bytemask bytemask = intmax << 8;//使intmax左移8次 Console.WriteLine(bytemask);//輸出結果 Console.ReadLine(); }
程序的運行結果為:
4.2.6 其他特殊運算符
C#中還有一些運算符不能簡單地歸到某個類型中,下面對這些特殊的運算符進行詳細講解。
1. is運算符
is運算符用於檢查變量是否為指定的類型。如果是,返回真;否則,返回假。
[例4.16]創建一個控制台應用程序,判斷整型變量i是否為整型,可以通過下面的代碼進行判斷,代碼如下。
static void Main(string[] args) { int i = 0;//聲明整型變量i bool result = i is int;//判斷i是否為整型 Console.WriteLine(result);//輸出結果 Console.ReadLine(); }
因為i是整型,所以運行程序返回值為:
注意:不能重載is運算符。is運算符只考慮引用轉換、裝箱轉換和取消裝箱轉換。不考慮其他轉換,如用戶定義的轉換。
2. 條件運算符
條件運算符(?:)根據布爾型表達式的值返回兩個值中的一個。如果條件為true, 則計算第一個表達式並以它的計算結果為准;如果為false, 則計算第二個表達式並以它的計算結果為准。使用格式為:
條件式?值1:值2
[例4.17]創建一個控制台應用程序,判斷用戶輸入的年份是不是閏年,代碼如下。
static void Main(string[] args) { Console.Write("請輸入一個年份:");//屏幕輸入提示字符串 string str = Console.ReadLine();//獲取用戶輸入的年份 int year = Int32.Parse(str);//將輸入的年份轉換成int類型 //計算輸入的年份是否為閏年 bool isleapyear = ((year % 400) == 0) || (((year % 4) == 0) && ((year % 100) != 0)); //利用條件運算符輸入“是”或者“不是” string yesno = isleapyear ? "是" : "不是"; Console.WriteLine("{0}年{1}閏年", year, yesno);//輸出結果 Console.ReadLine(); }
程序的運行結果為:
3. new運算符
new運算符用於創建一個新的類型實例,它有以下3種形式。
對象創建表達式,用於創建一個類類型或值類型的實例。
數組創建表達式,用於創建一個數組類型實例。
代表創建表達式,用於創建一個新的代表類型實例。
[例4.18]創建一個控制台應用程序,使用new運算符創建一個數組,向數組中添加項目,然后輸出數組中的項,代碼如下。
static void Main(string[] args) { string[] phone = new string[5];//創建具有5個項目的string類型數組 phone[0] = "華為P30";//為數組第一項賦值 phone[1] = "榮耀V20";//為數組第二項賦值 phone[2] = "小米9";//為數組第三項賦值 phone[3] = "VIVO X23";//為數組第四項賦值 phone[4] = "OPPO R17";//為數組第五項賦值 Console.WriteLine(phone[0]);//輸出數組第-項 Console.WriteLine(phone[1]);//輸出數組第二項 Console.WriteLine(phone[2]);//輸出數組第三項 Console.WriteLine(phone[3]);//輸出數組第四項 Console.WriteLine(phone[4]);//輸出數組第五項 Console.ReadLine(); }
程序的運行結果為:
4. typeof運算符
typeof運算符用於獲得系統原型對象的類型,也就是Type對象。Type類包含關於值類型和引用類型的信息。typeof運算符可以在C#語言中各種位置使用,以找出關於引用類型和值類型的信息。
[例4.19]創建一個控制台應用程序,利用typeof運算符獲取引用整型的信息,並輸出結果,代碼如下。
static void Main(string[] args) { Type mytype = typeof(int);//獲取int類型的原型對象 Console.WriteLine("類型:{0}", mytype);//輸出結果 Console.ReadLine(); }
程序的運行結果為:
4.3 運算符優先級
C#中的表達式是使用運算符連接起來的符合C#規范的式子,運算符的優先級決定了表達式中運算執行的先后順序。運算符優先級其實就相當於進銷存的業務流程,如進貨、入庫、銷售、出庫,只能按這個步驟進行操作。運算符的優先級也是這樣的,它是按照一定的級別進行計算的,通常優先級由高到低的順序依次是:
◆增量和減量運算。
◆算術運算。
◆關系運算。
◆邏輯運算。
◆賦值運算。
如果兩個運算符有相同的優先級,那么左邊的表達式要比右邊的表達式先被處理。在表達式中,可以通過括號“()”來調整運算符的運算順序,將想要優先運算的運算符放置在括號“()” 內。當程序開始執行時,括號“()” 內的運算符會被優先執行。表4.6列出了所有運算符從高到低的優先級順序。
表4.6運算符從高到低的優先級順序 |
||
分類 |
運算符 |
優先級次序 |
基本 |
x.y、f(x)、a[x]、x++、x--、new、typeof、checked、unchecked |
高
低 |
一元 |
+、-、!、~、++x、--x、(T)x |
|
乘除 |
*、/、% |
|
加減 |
+、- |
|
移位 |
<<、>> |
|
比較 |
<、>、<=、>=、is、as |
|
相等 |
==、!= |
|
位與 |
& |
|
位異或 |
^ |
|
位或 |
| |
|
邏輯與 |
&& |
|
邏輯或 |
|| |
|
條件 |
?: |
|
賦值 |
=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>= |
技巧:在編寫程序時盡量使用括號“()”運算符來限定運算次序,以免產生錯誤的運算順序。
4.4 小結
本章主要的內容是表達式與運算符,幾種常用的運算符需要讀者重點掌握。在應用程序開發中,運算符被頻繁地使用,可見其重要性。常見的運算符有算術運算符、賦值運算符、關系運算符、邏輯運算符、位運算符以及其他一些特殊的運算符。如果表達式中需要同時存在幾個運算符,那么就必須考慮運算符的優先級順序,優先級順序高的要比優先級順序低的先被執行。
4.5 實踐與練習
(1)嘗試開發一個程序,要求用“+”運算符進行加法和串聯字符串“15”。
(2)嘗試開發一個程序,要求使用“?:”運算符對變量進行賦值。
(3)嘗試開發一個程序,分別通過“++x"和“x++”運算符求和。