- 21天學(xué)通C#
- 秦婧等編著
- 804字
- 2018-12-29 13:23:26
2.3 運(yùn)算符的應(yīng)用
運(yùn)算符就是執(zhí)行某項(xiàng)操作的一個(gè)標(biāo)識(shí)符,例如執(zhí)行相加用“+”。C#提供了大量運(yùn)算符,這些運(yùn)算符是指定在表達(dá)式中執(zhí)行哪些操作的符號(hào)。通常允許對枚舉進(jìn)行整型運(yùn)算,例如==、!=、<、>、<=、>=、binary+、binary-、^、&、|、~、++、--和sizeof()。此外,很多運(yùn)算符可被用戶重載,由此在應(yīng)用到用戶定義的類型時(shí)更改這些運(yùn)算符的含義。如表2.3列出了按優(yōu)先級(jí)的順序進(jìn)行分組的C#運(yùn)算符。每個(gè)組中的運(yùn)算符具有相同的優(yōu)先級(jí)。
表2.3 C#運(yùn)算符

2.3.1 算術(shù)運(yùn)算符
在C#中,算術(shù)運(yùn)算符就是一些具有運(yùn)算功能的符號(hào)。和數(shù)學(xué)中運(yùn)用的一樣,C#語言算術(shù)運(yùn)算符包括+(加)、-(減)、*(乘)、/(除)、%(取余)。算術(shù)運(yùn)算符用在數(shù)學(xué)表達(dá)式中,其用法和功能與數(shù)學(xué)中一樣。
C#為數(shù)值和字符類型定義了二元運(yùn)算符“+”,它可用于計(jì)算兩個(gè)數(shù)值類型操作數(shù)的和,也可用于字符串的串聯(lián)。下面來演示如何使用“+”運(yùn)算符。
注意:二元運(yùn)算符“+”用于數(shù)據(jù)值的和的計(jì)算,也可以用于字符串的串聯(lián),當(dāng)用于字符串串聯(lián)時(shí),操作數(shù)必須為字符型。
【范例2-6】二元運(yùn)算符“+”的使用,這里有兩種功能,即作為數(shù)值計(jì)算和字符串聯(lián),如示例代碼2-6所示。
示例代碼2-6
01 using System; //包含基本類和基類 02 …… //還有其他命名空間,也是系統(tǒng)生成的,在此省略 03 namespace Ex_2_6 //程序的命名空間,也是項(xiàng)目名稱,如Ex_2_6 04 { 05 class Program 06 { 07 static void Main(string[] args) //主函數(shù),也是入口函數(shù) 08 { 09 Console.WriteLine(10 + 10); //這里的“+”號(hào)作為計(jì)算數(shù)值用 10 Console.WriteLine("10" + "10"); //這里的“+”號(hào)作為字符串相加用 11 Console.ReadLine(); //獲取輸入,為了控制臺(tái)窗口停下來,看輸
//出結(jié)果 12 } 13 } 14 }
【運(yùn)行結(jié)果】選擇“調(diào)試”|“啟動(dòng)調(diào)試”選項(xiàng)運(yùn)行程序,結(jié)果如圖2.9所示。

圖2.9 “+”運(yùn)算符的使用
【代碼解析】在本例中,演示了“+”運(yùn)算符的兩種常用功能。在第09行示例代碼中,運(yùn)算符“+”用于計(jì)算兩個(gè)數(shù)值型操作數(shù)的和。而在第10行代碼中,運(yùn)算符“+”用于兩個(gè)字符串的串聯(lián)。
2.3.2 賦值運(yùn)算符
賦值就是將某一數(shù)值賦給某個(gè)變量的過程,賦值運(yùn)算符有=、+=、-=、*=、/=、%=、&=、|=、^=、>>=、<<=、??。其中,“??”是一種很特殊的運(yùn)算符,它的功能是如果“??”運(yùn)算符的左操作數(shù)非空,則返回左操作數(shù),否則返回右操作數(shù)。就好比有一件事情要辦,準(zhǔn)備了兩種方案,如果第一種方案不能運(yùn)行,那就運(yùn)行第二種方案。下面來演示如何使用“??”運(yùn)算符。
注意:初學(xué)者容易把“=”當(dāng)做等號(hào),在C#中等號(hào)是用“= =”來表示的。
【范例2-7】在本例中,演示運(yùn)算符“??”的使用。用它檢查左操作數(shù)是否為空,如示例代碼2-7所示。
示例代碼2-7
01 using System; //包含基本類和基類 02 …… //還有其他命名空間,也是系統(tǒng)生成的,在此省略 03 namespace Ex_2_7 //程序的命名空間,也是項(xiàng)目名稱,如Ex_2_7 04 { 05 class Program 06 { 07 static void Main(string[] args) //主函數(shù),也是入口函數(shù) 08 { 09 string i = null; //聲明一個(gè)空的字符型變量i 10 string j = "10" ?? i;//聲明字符型變量j,用“??”檢查它的左操作數(shù)是否為空 11 Console.WriteLine(j);//由于“??”的左操作數(shù)據(jù)非空,所以將字符10賦給了j 12 Console.ReadLine(); //獲取輸入焦點(diǎn),為了查看運(yùn)行結(jié)果 13 } 14 } 15 }
【運(yùn)行結(jié)果】選擇“調(diào)試”|“啟動(dòng)調(diào)試”選項(xiàng)運(yùn)行程序,結(jié)果如圖2.10所示。

圖2.10 “??”運(yùn)算符的使用
【代碼解析】在第09行代碼中,將空值賦給string型變量i。而第10行代碼中,運(yùn)算符“??”用于檢查左邊和右邊的操作數(shù)是否為空。如果左邊的操作數(shù)不為空,則返回左邊的操作數(shù),否則返回右邊的操作數(shù)。
注意:“??”運(yùn)算符不能用于int型的操作,所以不要因?yàn)樵谑纠a2-7第10行代碼中看到“10”就認(rèn)為那是一個(gè)整數(shù)型的。
2.3.3 其他常用運(yùn)算符
其他特殊運(yùn)算符還包括++(自增)、--(自減)、?:、new、typeof。其中,“++”、“--”和“new”用得很多。“++”常用在變量自動(dòng)增加值的問題中。同樣,“--”常用在變量自動(dòng)減少值的問題中。而“new”常用來實(shí)例化。所謂實(shí)例化,就是將一個(gè)概念中的事物具體化。例如有人這個(gè)概念,用“new”就可以從人這個(gè)概念中實(shí)例化一個(gè)活生生的人出來。
三目運(yùn)算符“?:”是根據(jù)布爾表達(dá)式的值返回兩個(gè)值中的一個(gè)。如果條件為真,則返回第一個(gè)值,否則返回第二個(gè)值。如a/b=1?true:false;如果a/b=1為真,則返回true,否則返回false。三目運(yùn)算符常用在根據(jù)某種結(jié)果二選一的程序中。如要在兩個(gè)同學(xué)中選一個(gè)當(dāng)班長,就得規(guī)定一個(gè)條件,誰的成績好就選誰,就可以這樣來表示:成績好?甲:乙。如果甲的成績好,則選甲,否則選乙。new運(yùn)算符用于創(chuàng)建一個(gè)新的類型實(shí)例,它有三種形式。
· 對象創(chuàng)建表達(dá)式;
· 數(shù)組創(chuàng)建表達(dá)式;
· 代表創(chuàng)建表達(dá)式。
注意:new創(chuàng)建的類實(shí)例,不一定動(dòng)態(tài)分配內(nèi)存,即內(nèi)存空間。分配空間的意義就是在計(jì)算機(jī)的內(nèi)存中開辟一些空間用于存儲(chǔ)變量。
typeof運(yùn)算符用于獲取原型對象的類型。原型顧名思義就是數(shù)據(jù)類型本來的類型,如int型的原型是int32,就可以看出int在C#中是指32位的整型。它包括值類型和索引類型,下面來演示它的用法。
【范例2-8】運(yùn)算符“typeof”的使用。在本例中,將獲取int型、int32型、string型的原型。如示例代碼2-8所示。
示例代碼2-8
01 using System; //包含基本類和基類 02 …… //還有其他命名空間,也是系統(tǒng)生成,在此省略 03 namespace Ex_2_8 //程序的命名空間,也是項(xiàng)目名稱,如Ex_2_8 04 {
05 class Program 06 { 07 static void Main(string[] args) //主函數(shù),也是入口函數(shù) 08 { 09 Console.WriteLine(typeof(int)); //獲取int型的原型 10 Console.WriteLine(typeof(System.Int32)); //也可以看做int的原型 11 Console.WriteLine(typeof(string)); //獲取string型的原型 12 Console.ReadLine(); //獲取輸入焦點(diǎn),為了看運(yùn)行結(jié)果 13 } 14 } 15 }
【運(yùn)行結(jié)果】選擇“調(diào)試”|“啟動(dòng)調(diào)試”選項(xiàng)運(yùn)行程序,結(jié)果如圖2.11所示。

圖2.11 運(yùn)算符“typeof”的使用
【代碼解析】在本例中,從第09行~第11行,都是用typeof運(yùn)算符來獲取值類型的原型。這樣的操作在實(shí)際開發(fā)里用得不算很多,只是有時(shí)用于測試一些數(shù)據(jù)類型的原型時(shí)才用到。從運(yùn)行的結(jié)果可以看出,使用typeof運(yùn)算符獲取了系統(tǒng)原型對象的類型。
令廣大初學(xué)者困惑的三目運(yùn)算符還有“? :”。使用好這個(gè)三目運(yùn)算符對程序的優(yōu)化很有幫助,有時(shí)它可以簡化程序的代碼。它的功能是“判斷條件”?“條件成立則執(zhí)行這部分語句”:“條件不成立則執(zhí)行這部分語句”。其過程如圖2.12所示。

圖2.12 “? :”運(yùn)算符的執(zhí)行過程
它和if語句有等價(jià)的關(guān)系,和其對應(yīng)的if結(jié)構(gòu)程序如下所示。
01 if(判斷條件) //相當(dāng)于“? :”語句的前面部分 02 { 03 return a; //如果條件為真,相當(dāng)于“? :”中間部分 04 } 05 else{ 06 return b; //相當(dāng)于“? :”后面部分 07 }
注意:要比較兩個(gè)數(shù)的大小時(shí),常規(guī)的做法是定義一個(gè)中間變量,然后將兩數(shù)進(jìn)行比較,最后進(jìn)行交換。而用“? :”運(yùn)算符,只需要一行代碼就可實(shí)現(xiàn)了,例如(a>b)?max=a:max=b。
- 零起步輕松學(xué)單片機(jī)技術(shù)(第2版)
- 21天學(xué)通PHP
- Hadoop 2.x Administration Cookbook
- 手把手教你玩轉(zhuǎn)RPA:基于UiPath和Blue Prism
- Learning Apache Cassandra(Second Edition)
- 返璞歸真:UNIX技術(shù)內(nèi)幕
- 數(shù)據(jù)挖掘?qū)嵱冒咐治?/a>
- 西門子S7-200 SMART PLC實(shí)例指導(dǎo)學(xué)與用
- 傳感器與物聯(lián)網(wǎng)技術(shù)
- C語言寶典
- Learn CloudFormation
- 項(xiàng)目實(shí)踐精解:C#核心技術(shù)應(yīng)用開發(fā)
- 軟測之魂
- PostgreSQL High Performance Cookbook
- Spark Streaming實(shí)時(shí)流式大數(shù)據(jù)處理實(shí)戰(zhàn)