官术网_书友最值得收藏!

第5章 運算符與表達式

本章視頻教學錄像:53分鐘

通過第4章的學習,我們對C#變量與常量的內容有了簡單的了解。C#語言中的表達式類似于數學運算中的表達式,用運算符把操作數連接起來的式子就是表達式。本章主要介紹運算符的使用,以及各類表達式的語法。

本章要點(已掌握的在方框中打鉤)

□ 運算符

□ 表達式

5.1 運算符

本節視頻教學錄像:44分鐘

運算符是表示各種不同運算的符號,在程序設計語言中運算是指對各種數據進行處理,比如表示加法運算就用“+”運算符。根據運算符所要求的操作數的個數,運算符分為“一元運算符”、“二元運算符”和“多元運算符”等。一元運算符的操作數只有一個,二元運算符就是需要兩個操作數參與的運算符,三元運算符要求有3個操作數參與運算。運算符的類型有算術運算符、賦值運算符、關系運算符、邏輯運算符、條件運算符等,它們分別對應相應的表達式。下表列舉了C#所支持的運算符。

5.1.1 算術運算符

算術運算符用于對數值進行計算,其結果仍是一個數值。算術運算符有“+”、“-”、“*”、“/”、“%”、“++”和“--”。其中“+”、“-”運算符既可作為一元運算符,也可作為二元運算符。“*”、 “/”和“%”只能作為二元運算符。自加運算符“++”、自減運算符“--”屬于一元運算符。下面將對這幾種算術運算符進行詳細講解。

1.加法運算符

加法運算符(+)是通過兩個操作數相加來執行加法運算。

【范例5-1】 加法運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator1”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-1.txt)。

    01  int opr1=13;     //聲明操作數變量并賦值
    02  int opr2=8;      //聲明操作數變量并賦值
    03  int x;;          //聲明int變量
    04  x=opr1+opr2; //兩個操作數相加
    05  Console.WriteLine("加法運算:");
    06 Console.WriteLine("{0}+{1}={2}",opr1,opr2,x);      //輸出加法運算結果
    07 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

2.減法運算符

減法運算符(-)是通過操作數相減來執行減法運算。

【范例5-2】 減法運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator2”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-2.txt)。

    01 double d1=118.8;                            //聲明操作數變量并賦值
    02 double d2=10.5;                             //聲明操作數變量并賦值
    03 double x;                                   //聲明double變量
    04 x=d1-d2;                                   //兩個操作數相減
    05 Console.WriteLine("減法運算:");
    06 Console.WriteLine("{0}-{1}={2}",d1,d2,x);  //輸出減法運算結果
    07  Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

3.乘法運算符

乘法運算符(*)是通過兩個操作數相乘來執行乘法運算并返回它們的乘積。

【范例5-3】 乘法運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator3”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-3.txt)。

    01 int opr3=25;                                 //聲明操作數變量并賦值
    02 int opr4=8;                                  //聲明操作數變量并賦值
    03 int x;                                       //聲明int變量
    04 x=opr3*opr4;                                       //兩個操作數相乘
    05 Console.WriteLine("乘法運算:");
    06 Console.WriteLine("{0}*{1}={2}",opr3,opr4,x);      //輸出乘法運算結果
    07 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

4.除法運算符

除法運算符(/)是用被除數除以除數執行除法運算取商。

【范例5-4】 除法運算的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator4”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-4.txt)。

    01 int opr5=64;                                        //聲明操作數變量并賦值
    02 int opr6=8;                                         //聲明操作數變量并賦值
    03 int x;                                              //聲明int變量
    04 x=opr5/opr6;                                       //兩個操作數相乘
    05 Console.WriteLine("除法運算:");
    06 Console.WriteLine("{0}/{1}={2}",opr5,opr6,x);      //輸出除法運算結果
    07 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

5.求余運算符

求余運算符(%)是用來執行除法運算操作,得到余數的值。

【范例5-5】 求余運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator5”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-5.txt)。

    01 int opr7=100;    //聲明操作數變量并賦值
    02 int opr8=8;      //聲明操作數變量并賦值
    03 int x;                  //聲明int變量
    04 x=opr7 % opr8;        //兩個操作數進行求余運算
    05 Console.WriteLine("求余運算:");
    06 Console.WriteLine("{0}%{1}={2}",opr7,opr8,x);     //輸出求余運算結果
    07 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

6.自增、自減運算符

自增運算符“++”可將操作數加1,自減運算符“--”可將操作數減1,自加、自減運算符在操作數之前和操作數之后的結果是不一樣的。

【范例5-6】 自增、自減運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator6”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-6.txt)。

    01  Console.WriteLine("--自加和自減運算舉例:");
    02 int num1=5,var1;       //定義變量num1和var1,num1的初值為5
    03 var1=++num1;          //num1加1后賦給var1
    04 Console.WriteLine("num1=5,var1=++num1,var1={0},num1={1}",var1,num1);   //輸出結果
    05 num1=5;               //設置num1的值為5,便于對比運算結果
    06 var1=num1++;          //num1賦給var1后加1
    07 Console.WriteLine("num1=5,var1=num1++,var1={0},num1={1}",var1,num1);
    08 num1=5;               //設置num1的值為5,便于對比運算結果
    09 var1=--num1;          //num1減1后賦給var1
    10 Console.WriteLine("num1=5,var1=--num1,var1={0},num1={1}",var1,num1);
    11 num1=5;               //設置num1的值為5,便于對比運算結果
    12 var1=num1--;          //num1賦給var1后減1
    13 Console.WriteLine("num1=5,var1=num1--,var1={0},num1={1}",var1,num1);
    14 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

5.1.2 賦值運算符

賦值運算符對運算符右邊的操作式求值,并用該值設置運算符左邊的變量操作式。賦值運算符主要有簡單賦值(=)及復合賦值(+=、-=、*=、/=、%=、&=、|=、>>=、<<=、^=)運算符。可以放在賦值運算符左邊的對象類型是變量、屬性、索引和事件。如果賦值運算符兩邊的操作數類型不一致,就需要首先進行類型轉換,然后再賦值。二元運算符就是需要兩個操作數參與的運算符,賦值運算符是二元運算符。

【范例5-7】 賦值運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator7”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-7.txt)。

    01  Console.WriteLine("賦值運算符的例子:");
    02 int n=5,var1=2;  //定義變量n和var1,n的初值為5
    03 var1+=n;        //相當于var1=var1+n
    04 Console.WriteLine("n=5;var1=2;var1+=n,var1={0}",var1);   //輸出結果
    05 n=5;            //設置n的值為5,便于對比運算結果
    06 var1=2;
    07 var1/=n;        //相當于var1=var1/n
    08 Console.WriteLine("n=5;var1=2; var1/=n,var1={0}",var1);  //輸出結果
    09 Console.ReadLine();

【運行結果】

運行結果如下圖所示。

5.1.3 比較運算符

比較運算符又稱關系運算符,我們可以把它理解為一種“判斷”,判斷的結果是“真”或者“假”,關系表達式的返回值總是布爾型。也就是說比較運算符主要用于比較兩個操作數并得到一個布爾類型的值。關系運算符有>、<、>=、<=、!=、==運算符,它們都屬于二元運算符。下面對這幾種關系運算符進行詳細講解。

1.大于運算符

大于運算符(>)用于比較一個操作數是否大于另外一個操作數,如果大于,返回true,否則返回false。

【范例5-8】 大于運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator8”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-8.txt)。

    01 int u1=13;       //聲明操作數變量并賦值
    02  int u2=8;       //聲明操作數變量并賦值
    03  bool result;     //聲明int變量
    04  result=u1>u2;
    05  Console.WriteLine("大于運算:u1>u2");
    06  Console.WriteLine(result); //輸出比較結果
    07  Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

2.小于運算符

小于運算符(<)用于比較一個操作數是否小于另外一個操作數,如果小于,該運算符返回true,否則返回false。

【范例5-9】 小于運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator9”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-9.txt)。

    01 decimal a=2001.00m;                //聲明操作數變量并賦值
    02 decimal b=2000.00m;                //聲明操作數變量并賦值
    03 bool result;                      //聲明bool型變量
    04 result=a<b;
    05 Console.WriteLine("小于運算:a<b");
    06 Console.WriteLine(result);        //輸出比較結果
    07 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

3.大于或等于運算符

大于或等于運算符(>=)用于比較一個操作數是否大于或等于另外一個操作數,如果大于或等于,該運算符返回true,否則返回false。

【范例5-10】 大于或等于運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator10”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-10.txt)。

    01  int m1=13;      //聲明操作數變量并賦值
    02  int m2=8;       //聲明操作數變量并賦值
    03 bool result;                       //聲明bool變量
    04 result=m1>=m2;
    05 Console.WriteLine("大于或等于運算:m1>=m2");
    06 Console.WriteLine(result);        //輸出比較結果
    07 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

4.小于或等于運算符

小于或等于運算符(<=)用于比較一個操作數是否小于或等于另外一個操作數,如果小于或等于,該運算符返回true,否則返回false。

【范例5-11】 小于或等于運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator11”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-11.txt)。

    01 int m1=13;                         //聲明操作數變量并賦值
    02 int m2=8;                          //聲明操作數變量并賦值
    03 bool result;                       //聲明bool變量
    04 result=m1<=m2;
    05 Console.WriteLine("小于或等于運算:m1<=m2");
    06 Console.WriteLine(result);        //輸出比較結果
    07 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

5.等于運算符

等于運算符(==)用于比較一個操作數是否等于另外一個操作數,如果等于,該運算符返回true,否則返回false。

【范例5-12】 等于運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator12”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-12.txt)。

    01  int s1=13;      //聲明操作數變量并賦值
    02  int s2=8;                         //聲明操作數變量并賦值
    03 bool result;                       //聲明bool變量
    04 result=s1==s2;
    05 Console.WriteLine("等于運算:s1==s2");
    06 Console.WriteLine(result);        //輸出比較結果
    07 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

6.不等于運算符

不等于運算符(!=)是與等于運算符相反的運算符,用于比較一個操作數是否不等于另外一個操作數,如果不等于,該運算符返回true,否則返回false。它有兩種表達式,一種是普通的不等運算符(!=),另一種是相等運算符的否定!(a==b)。這兩種格式可以計算出相同的值。

【范例5-13】 不等于運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator13”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-13.txt)。

    01 int n1=13;                             //聲明操作數變量并賦值
    02 int n2=8;                              //聲明操作數變量并賦值
    03 bool result1;                          //聲明bool變量
    04 bool result2;
    05 result1=n1!=n2;
    06 result2=!(n1==n2);
    07 Console.WriteLine("不等于運算:n1!=n2");
    08 Console.WriteLine(result1);              //輸出比較結果
    09 Console.WriteLine(result2);              //輸出比較結果
    10 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

5.1.4 邏輯運算符

邏輯運算符用于連接一個或多個條件,判斷這些條件是否成立。C#中的邏輯運算符有“&”“、|”“、^”、“&&”、“||”、“!”,可分為兩類,“&”、“|”、“^”稱為整體邏輯運算符,它們允許在兩個數值上進行布爾運算;“&&”、“||”、“!”稱為條件邏輯運算符,運算符兩邊的操作數的值必須是布爾類型,操作數常為條件表達式。

這些運算符,除了條件運算符(“!”)以外,都是二元運算符,條件運算符是一元運算符。下面對這幾種邏輯運算符進行詳細講解。

1.按位“與”運算符

按位“與”運算符(&)產生兩個操作數按位與后的值。當兩個操作數的對應位都是1時,返回的對應的結果位是1;當兩個整數的對應位都是0或者其中一個位是0時,返回相應的結果位是0。

【范例5-14】 按位“與”運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator14”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-14.txt)。

    01 int u1=6,u2=8,u3;        //聲明操作數變量并賦值
    02 u3=u1&u2;                //對變量u1、u2進行與運算
    03 Console.WriteLine("按位與運算:u1&u2");
    04 Console.WriteLine(u3);   //輸出比較結果
    05 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

2.按位“或”運算符

按位“或”運算符(|)產生兩個操作數按位或后的值。當兩個操作數的對應位有一個是1時,返回的對應的結果位是1;當兩個操作數的對應位都是0時,返回相應的結果位是0。

【范例5-15】 按位“或”運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator15”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-15.txt)。

    01 int u1=6,u2=8,u3;        //聲明操作數變量并賦值
    02 u3=u1|u2;                //對變量u1、u2進行或運算
    03 Console.WriteLine("按位或運算:u1|u2");
    04 Console.WriteLine(u3);   //輸出比較結果
    05  Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

3.按位“異或”運算符

按位“異或”運算符(^)產生兩個操作數按位異或后的值。當兩個操作數的對應位一個是1,另外一個是0時,返回的對應的結果位是1;當兩個操作數的對應位都是1或者都是0時,返回相應的結果位是0。

【范例5-16】 按位“異或”運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator16”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-16.txt)。

    01 int u1=6,u2=8,u3;        //聲明操作數變量并賦值
    02 u3=u1^u2;                //對變量u1、u2進行異或運算
    03 Console.WriteLine("按位異或運算:u1^u2");
    04 Console.WriteLine(u3);   //輸出比較結果
    05 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

4.布爾“與”運算符

布爾“與”運算符(&&)用于比較兩個布爾操作數。當兩個布爾操作數的結果都為真時,結果為“真”,其余情況結果為“假”。

【范例5-17】 布爾“與”運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator17”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-17.txt)。

    01 int u1=6,u2=8;                   //聲明整型變量并賦值
    02 String n1="Ada",n2="Alice";       //聲明字符變量并賦值
    03 bool b1,b2,b3;                   //聲明布爾變量
    04 b1=u1>u2;                        //比較u1、u2,結果放入b1
    05 b2=n1==n2;                       //比較n1、n2,結果放入b2
    06 b3=b1&&b2                        //比較b1、b2,結果放入b3
    07 Console.WriteLine("比較運算:u1>u2");
    08 Console.WriteLine(b1);           //輸出比較結果
    09 Console.WriteLine("等于運算:n1==n2");
    10 Console.WriteLine(b2);
    11 Console.WriteLine("布爾與運算:b1&&b2");
    12 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

5.布爾“或”運算符

布爾“或”運算符(||)用于比較兩個布爾操作數。只要一個布爾操作數的結果為真,則結果為“真”,如果兩個布爾操作數的值都是假,則結果為假。

【范例5-18】 布爾“或”運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator18”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-18.txt)。

    01 int u1=6,u2=8;                   //聲明整型變量并賦值
    02 String n1="Ada",n2="Alice";       //聲明字符變量并賦值
    03 bool b1,b2,b3;                   //聲明布爾變量
    04 b1=u1>u2                         //比較u1、u2,結果放入b1
    05 b2=n1==n2;                       //比較n1、n2,結果放入b2
    06 b3=b1||b2;                       //比較b1、b2,結果放入b3
    07 Console.WriteLine("比較運算:u1>u2");
    08 Console.WriteLine(b1);          //輸出比較結果
    09 Console.WriteLine("等于運算:n1==n2");
    10 Console.WriteLine(b2);
    11 Console.WriteLine("布爾或運算:b1||b2");
    12 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

6.條件“非”運算符

條件“非”運算符(!)用于對布爾操作數結果取反。

【范例5-19】 條件“非”運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator19”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-19.txt)。

    01 String n1="Ada",n2="Alice";       //聲明字符變量并賦值
    02 bool b1,b2;                      //聲明布爾變量
    03 b1=n1==n2;                       //比較n1、n2,結果放入b1
    04 b2=!b1;                          //比較n1、n2,結果放入b2
    05 Console.WriteLine("等于運算:n1==n2");
    06 Console.WriteLine(b1);           //輸出比較結果
    07 Console.WriteLine("條件非運算:b2=!b1");
    08 Console.WriteLine(b2);
    09 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

5.1.5 其他運算符

C#中還有一些運算符不能簡單歸結到某個類型,下面對這些特殊的運算符進行講解。

1.條件運算符

條件運算符(?:)是if…else的簡化格式,它是三元運算符。三元運算符要求有三個操作數參與運算。格式為:

操作數1?操作數2:操作數3;

其中操作數可以為變量或者表達式。輸出結果為:如果操作數1為“真”,輸出操作數2;如果操作數1為“假”,輸出操作數3。三元運算符的輸出結果取決于“?”前面的操作數1。

【范例5-20】 條件運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator20”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-20.txt)。

    01 int n;                  //定義變量n
    02 Console.WriteLine("條件運算符:");
    03 Console.WriteLine("n=3>8?3:8結果:n={0}",n=3>8?3:8);
    04 Console.WriteLine("n=3<8?3:8結果:n={0}",n=3<8?3:8);
    05 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

2. ()運算符

()運算符用于指定操作數中的運算順序和指定強制轉換或類型轉換。()運算符的使用范圍非常廣泛。如下所示。

    01 int n;           //聲明整型變量
    02 double m=(1.6+1)*3;
    03 n=(int)m;       //()用于類型轉換

3. 點運算符

點運算符(.)用于訪問數據結構的成員。前面列舉的實例程序幾乎都有應用。格式為:

    數據結構.成員

如下所示。

    01 System.Console.WriteLine("hello");
    02 System.Console.ReadLine();

4. 索引運算符

索引運算符([])用于數組、索引器和屬性,也可用于指針。如數組類型是一種后跟[]的類型,如下所示,創建一個有10個元素的數組,若要訪問數組的一個元素,則用方括號括起所需元素的索引。

    01 int[]a=new int[10];
    02 a[0]=a[1]=1;

5. new運算符

new運算符用于創建一個新的類型實例。它有以下三種形式。

① 對象創建表達式,用于創建一個類類型或值類型的實例。

② 數組創建表達式,用于創建一個數組類型實例。

③ 代表創建表達式,用于創建一個新的代表類型實例。

例如,下面三個式子分別創建了一個對象、數組和代表實例。

    01 class N{};N a=new N;
    02 string[]M=new string[5];
    03 delegate double L(int p); L f=new L(2);

6. typeof運算符

typeof運算符用于獲得系統原型對象的類型,也就是Type類型。Type類包含關于值類型和引用類型的信息。

【范例5-21】 typeof運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator21”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-21.txt)。

    01  Type T=typeof(int);                //獲取引用類型的信息
    02 Console.WriteLine("類型:{0}",T);  //輸出結果
    03 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

7. checked和unchecked運算符

checked和unchecked運算符用于允許或者禁止對指定的運算進行檢測,并指出相應的錯誤提示信息。

【范例5-22】 checked和unchecked運算符的使用。

⑴ 在Visual Studio 2013中新建C#控制臺程序,項目名為“Operator22”。

⑵ 在Program.cs的Main方法中輸入以下代碼(代碼5-22.txt)。

    01 byte s=255;                        //獲取引用類型的信息
    02 checked
    03 {
    04   s+=2
    05 }
    06 Console.WriteLine(s.ToString());   //輸出結果
    07 Console.ReadLine();

【代碼詳解】

代碼2~5行執行checked操作。byte數據類型只能包含0~255的數,所以s值的增量會導致溢出,由于使用了checked運算符,所以在運行程序時編譯器會檢查溢出錯誤,并給出錯誤提示。

用checked運算符可以檢查程序中所有未標記代碼的溢出。如果要禁止溢出,可以用unchecked運算符,代碼如下。

    01 short s=255;                       //獲取引用類型的信息
    02 unchecked
    03 {
    04   s+=2;
    05 }
    06 Console.WriteLine(s.ToString());   //輸出結果
    07 Console.ReadLine();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

可以看出,程序運行時沒有出現異常,但數據會丟失,因為byte數據類型最大為255,溢出的位會被丟掉,所以s變量得到的值是1。

5.2 運算符優先級

本節視頻教學錄像:1分鐘

表達式有多個運算符時,表達式的求值順序由運算符的優先級決定,先取優先級較高的運算符進行計算,再將運算的結果運用于優先級較低的運算符。也遵從算術運算的“先乘除后加減”這樣的規則,但可以用圓括號“()”改變運算的優先次序。C#運算的優先級如下表所示,越往上優先級越高。如果一個表達式中出現了同一個優先級的運算符,則運算順序取決于其結合性,結合性是指運算符在表達式中從左到右或從右到左的運算順序。

5.3 表達式

本節視頻教學錄像:1分鐘

C#語言中的表達式類似于數學運算中的表達式,用運算符把操作數連接起來的式子就是表達式。操作數包括文本、變量、常量和表達式等。如下就是簡單的表達式。

    01 int a=288;      //聲明操作數變量并賦值
    02 a=a/2+6;        //改變a的值

在C#中,表達式在經過一系列運算后得到一個運算結果,結果的類型由參加運算的操作對象的數據類型決定。

5.4 高手點撥

本節視頻教學錄像:6分鐘

在5.1節我們對運算符進行了基礎講解,其中一些運算符蘊含著技巧性的用法,在這里進行詳細說明。

1. n++與++n

只要學習編程語言,學習運算符,都少不了學習自增、自減運算。++與--這兩個運算符特殊的地方主要表現在,它們既可以用做前綴運算符(用在變量前面,如++n),也可以用做后綴運算符(用在變量后面,如n++)。不管作為前綴還是后綴,它作用的變量都會實現自增或者自減運算。

++與--的使用分為以下兩種情況。

① 這種情況比較簡單,沒有歧義,就是純粹的實現自增。被作用的變量不參與運算。

    01 int n=0;
    02 n++;                    //n的值為1
    03 ++n;                    //n的值為2

② 被作用的變量參與運算。

有歧義就在這個情況下,++或--作為后綴運算符時,其作用的變量先參與運算,再自增;++或--作為前綴運算符時,其作用的變量先自增或自減,再參與運算。

    01 int x=0,y=0;
    02 x=y++;        //x的值為0
    03 y=0;
    04 x=++y;        //x的值為1

當然,++與--也不是非使用不可,為了使程序沒有歧義,增加可讀性,對于參與運算的變量自增運算,我們可以分兩步進行,代碼如下。

    01 int x=0,y=0;
    02 x=y;           //x的值為0
    03 y=y+1;
    04 y=0;
    05 y=y+1;
    06 x=y;

這樣就不用再糾結是先自增還是先運算了。

提示

“+”與“--”運算符只能作用于變量,對于非變量是不適用的,如x=(y+1)++就是非法表達式。

2. 用圓括號來保證運算優先

① 算術運算。

計算x與y的和的5倍。

    01 int x,y,z;
    02 z=(x+y)*5;

這是個比較簡單的例子,卻很能說明問題。當我們不知道“+”與“*”的優先級時,就可以使用括號來保證“+”的運算。

② 邏輯運算。

當x的值在[1,5]和[10,+∞)區間時,將y賦值為100,否則將y賦值為0。

    01 int x=6,y;
    02 if(x>=1&&x<=5||x>=10)//if((x>=1&&x<=5)||(x>=10))
    03 {
    04   y=100;
    05 }
    06 else
    07 y=0;

3. 使用&運算符實現狀態控制

使用&運算符實現狀態控制比較常見,它不僅運算速度快,而且非常節省空間,用一個int型就可以存儲。這種方式的權限有查看、新增、修改、刪除、保存權限,并給予用戶查看、修改、保存的權限。以下代碼判斷該用戶有什么權限,沒有什么權限,然后輸出判斷結果。

    01 int None=0;                    //無權限
    02 int Scan=1;                    //查看
    03 int New=2;                     //新增
    04 int Modify=4;                  //修改
    05 int Delete=8;                  //刪除
    06 int Save=16;                   //保存
    07 int userRight=None;            //默認沒有權限
    08 userRight=Scan|Modify|Save;   //給用戶查看、修改、保存權限
    09 //下面開始判斷用戶的權限
    10 if((userRight&Scan)==Scan)
    11 {
    12         Console.WriteLine("該用戶具有查看權限。");
    13 }
    14 else
    15 {
    16         Console.WriteLine("該用戶沒有查看權限。");
    17 }
    18 if((userRight&New)==New)
    19 {
    20         Console.WriteLine("該用戶具有新增權限。");
    21 }
    22 else
    23 {
    24         Console.WriteLine("該用戶沒有新增權限。");
    25 }
    26 if((userRight&Modify)==Modify)
    27 {
    28         Console.WriteLine("該用戶具有修改權限。");
    29 }
    30 else
    31 {
    32         Console.WriteLine("該用戶沒有修改權限。");
    33 }
    34 if((userRight&Delete)==Delete)
    35 {
    36         Console.WriteLine("該用戶具有刪除權限。");
    37 }
    38 else
    39 {
    40         Console.WriteLine("該用戶沒有刪除權限。");
    41 }
    42 if((userRight&Save)==Save)
    43 {
    44         Console.WriteLine("該用戶具有保存權限。");
    45 }
    46 else
    47 {
    48         Console.WriteLine("該用戶沒有保存權限。");
    49 }
    50 Console.ReadKey();

【運行結果】

單擊工具欄中的按鈕,即可在控制臺中輸出如下圖所示的結果。

這只是狀態控制的簡單舉例,實際運用中,一般把狀態設置為枚舉,枚舉更容易使用,有興趣的讀者可以自己實現一下。

5.5 實戰練習

操作題

使用條件運算符判斷指定年份是不是閏年。

主站蜘蛛池模板: 肃宁县| 阿勒泰市| 博客| 黎平县| 合水县| 离岛区| 柯坪县| 玉龙| 油尖旺区| 合阳县| 康马县| 金阳县| 昭通市| 定陶县| 宜都市| 伊春市| 汉川市| 邢台县| 富顺县| 黑龙江省| 南宫市| 凭祥市| 乌兰察布市| 秦皇岛市| 巧家县| 瑞安市| 平凉市| 象州县| 游戏| 桂林市| 黎城县| 南丰县| 华安县| 本溪市| 天门市| 绵阳市| 自贡市| 大理市| 临海市| 固阳县| 古蔺县|