- C# 2012程序設(shè)計(jì)實(shí)踐教程 (清華電腦學(xué)堂)
- 張冬旭
- 2261字
- 2021-03-26 17:16:27
2.5 運(yùn)算符
范例3中所使用的加號(hào)“+”是C#運(yùn)算符的一種,該符號(hào)可以連接字符串,也可以執(zhí)行數(shù)值的加法運(yùn)算。C#中支持多種運(yùn)算符的使用,本節(jié)介紹C#中的常用運(yùn)算符及其使用。
2.5.1 常用運(yùn)算符
C#中的運(yùn)算符是對(duì)變量、常量或其他數(shù)據(jù)進(jìn)行計(jì)算的符號(hào),根據(jù)運(yùn)算符的操作個(gè)數(shù)可以將它分為三類:一元運(yùn)算符、二元運(yùn)算符、三元運(yùn)算符。根據(jù)運(yùn)算符所執(zhí)行的操作類型主要將它分為:算術(shù)運(yùn)算符、比較運(yùn)算符、賦值運(yùn)算符、邏輯運(yùn)算符、條件運(yùn)算符、遞增運(yùn)算符、遞減運(yùn)算符、new運(yùn)算符和as運(yùn)算符。
1.算術(shù)運(yùn)算符
算術(shù)運(yùn)算符就是進(jìn)行算術(shù)運(yùn)算的操作符,如“+”“-”和“/”等。使用算術(shù)操作符將數(shù)值連接在一起,符合C#語法的表達(dá)式可以稱為算術(shù)表達(dá)式。常見的算術(shù)運(yùn)算符以及說明如表2-7所示。
表2-7 常見的算術(shù)運(yùn)算符

2.比較運(yùn)算符
比較運(yùn)算符通過比較兩個(gè)對(duì)象的大小,返回一個(gè)真/假的布爾值,比較運(yùn)算符又叫作關(guān)系運(yùn)算符。使用比較運(yùn)算符將數(shù)值連接在一起,符合C#語法的式子稱為比較表達(dá)式。常見的比較運(yùn)算符及說明如表2-8所示。
表2-8 常見的比較運(yùn)算符

3.邏輯運(yùn)算符
&&、&、^、!||以及|都被稱為邏輯運(yùn)算符或邏輯操作符,使用邏輯運(yùn)算符把運(yùn)算對(duì)象連接起來并且符合C#語法的式子稱為邏輯表達(dá)式。常見的邏輯運(yùn)算符及說明如表2-9所示。
表2-9 常見的邏輯運(yùn)算符

邏輯運(yùn)算結(jié)果是一個(gè)用真/假值來表示的布爾類型,當(dāng)操作數(shù)不同時(shí),邏輯運(yùn)算符的運(yùn)算結(jié)果也可以不同,如表2-10所示演示了操作運(yùn)算的真假值結(jié)果。
表2-10 常見的邏輯運(yùn)算符真值表

4.賦值運(yùn)算符
賦值運(yùn)算符用于變量、屬性、事件或索引器元素賦新值,它可以把右邊操作數(shù)的值賦予左邊。C#中常見的賦值操作符包括=、+=、-=、*=、/=、%=、^=、&=、!=、<<=和>>=等,它們的具體說明如表2-11所示。
表2-11 常見的賦值運(yùn)算符

表2-11中已經(jīng)列出了常見的賦值運(yùn)算符,下面將對(duì)左移賦值、右移賦值和位與賦值進(jìn)行介紹。
1)<<=(左移賦值運(yùn)算符)
左移是將<<左邊的二進(jìn)制位右移若干位,<<右邊的數(shù)指定移動(dòng)位數(shù),高位丟棄,低位補(bǔ)0,移幾位就相當(dāng)于乘以2的幾次方。
2)>>=(右移賦值運(yùn)算符)
右移賦值運(yùn)算符是用來將一個(gè)數(shù)的各二進(jìn)制位右移若干位,移動(dòng)的位數(shù)由右操作數(shù)指定(右操作數(shù)必須是非負(fù)值),移到右端的低位被舍棄,對(duì)于無符號(hào)數(shù),高位補(bǔ)0。對(duì)于有符號(hào)數(shù),某些機(jī)器將對(duì)左邊空出的部分用符號(hào)位填補(bǔ)(即算術(shù)移位),而另一些機(jī)器則對(duì)左邊空出的部分用0填補(bǔ)(即邏輯移位)。
3)&=(位與賦值運(yùn)算符)
位與賦值運(yùn)算符是指參加運(yùn)算的兩個(gè)數(shù)據(jù),按二進(jìn)制位進(jìn)行“與”運(yùn)算。如果兩個(gè)相應(yīng)的二進(jìn)制位都為1,則該位的結(jié)果值為1;否則為0。這里的1可以理解為邏輯中的true,而0可以理解為邏輯中的false。
5.條件運(yùn)算符
條件運(yùn)算符是指?:運(yùn)算符,它也通常被稱為三元運(yùn)算符或三目運(yùn)算符,使用條件運(yùn)算符將運(yùn)算對(duì)象連接起來并且符合C#語法的式子稱為邏輯表達(dá)式。如下代碼所示為條件運(yùn)算符的一般語法。
b = (a>b) ? a:b;
上述語法中?和:都是關(guān)鍵符號(hào),?前面通常是一個(gè)比較表達(dá)式(即關(guān)系表達(dá)式),后面緊跟著兩個(gè)變量a和b。?用來判斷前面的表達(dá)式,如果表達(dá)式的結(jié)果為true則返回值為a,如果前面表達(dá)式的結(jié)果為false則返回值為b。
例如,聲明一個(gè)docname變量表示醫(yī)生的名稱,接著通過GetType()方法獲取該變量的類型,并且通過IsValueType判斷是否為值類型,如果是則返回“值類型”,否則返回“引用類型”。然后將返回的結(jié)果保存到country變量中,最后將結(jié)果在控制臺(tái)輸出。其具體代碼如下所示。
string docname = "angel"; string country = docname.GetType().IsValueType ? "值類型":"引用類型"; Console.WriteLine(country);
6.其他特殊運(yùn)算符
C#中包含多種運(yùn)算符,除了上面介紹的運(yùn)算符外,還包括其他的一些特殊運(yùn)算符,如表2-12所示對(duì)這些運(yùn)算符進(jìn)行了介紹。
表2-12 其他特殊運(yùn)算符

2.5.2 運(yùn)算符的使用
運(yùn)算符可以在C#語句中使用。但如果一條語句中同時(shí)有著多個(gè)運(yùn)算符,那么這些運(yùn)算符是否會(huì)相互沖突?是否會(huì)順序進(jìn)行?還是像數(shù)學(xué)運(yùn)算符一樣有著優(yōu)先級(jí)關(guān)系呢?
C#運(yùn)算符與數(shù)學(xué)運(yùn)算符控制著不同的領(lǐng)域,有著相同和不同的運(yùn)算符。但是,C#中的運(yùn)算符同樣有著優(yōu)先級(jí)關(guān)系,如同數(shù)學(xué)運(yùn)算中,乘法的優(yōu)先級(jí)大于加法。
當(dāng)用戶在語句中使用多個(gè)運(yùn)算符時(shí),需要根據(jù)運(yùn)算的優(yōu)先級(jí)別進(jìn)行計(jì)算。如表2-13所示列出了C#運(yùn)算符的優(yōu)先級(jí)別與結(jié)合性。
表2-13 C#中運(yùn)算符的優(yōu)先級(jí)與結(jié)合性

【范例4】
三角形可以有內(nèi)切圓和外接圓,三角形和圓都是常見的相互關(guān)聯(lián)的圖形?,F(xiàn)有半徑為4的圓和三邊分別為7.5、10、12.5的三角形,計(jì)算它們的周長(zhǎng)和面積,比較三角形和圓形的周長(zhǎng)和面積。
三邊分別為7.5、10、12.5的三角形可以看出是直角三角形,面積是7.5×10/2。計(jì)算并比較圖形的周長(zhǎng)和面積,要求在比較的時(shí)候使用整型數(shù)據(jù)類型,代碼如下。
int r = 4; //圓的半徑 double l1=7.5,l2=10,l3=12.5; //三角形的邊長(zhǎng) double roundl = 2 * 3.14 * r; //圓的周長(zhǎng) double rounds = 3.14 * r* r; //圓的面積 double trianglel = l1 + l2 + l3; //三角形周長(zhǎng) double triangles = l1 * l2 / 2; //三角形面積 int roundlint = (int)roundl; //浮點(diǎn)型轉(zhuǎn)換為整型 int roundsint = (int)rounds; int trianglelint = (int)trianglel; int trianglesint = (int)triangles; double maxnuml = (roundlint > trianglelint) ? roundlint : trianglelint; //找出較大的周長(zhǎng)值 string maxl = (roundl > trianglel) ? "圓形":"三角形";//找出周長(zhǎng)較大的圖形 double maxnums = (roundsint > trianglesint) ? roundsint : trianglesint; //找出較大的面積值 string maxs = (rounds > triangles) ? "圓形":"三角形";//找出面積較大的圖形 Console.WriteLine("圓形周長(zhǎng){0},面積{1}", roundl, rounds); Console.WriteLine("三角形周長(zhǎng){0},面積{1}", trianglel, triangles); Console.WriteLine("{0}周長(zhǎng)較大,為 {1}", maxl, maxnuml); //輸出周長(zhǎng)較大的圖形及面積 Console.WriteLine("{0}面積較大,為 {1}", maxs,maxnums ); //輸出面積較大的圖形及面積
上述代碼的執(zhí)行結(jié)果如下所示。
圓形周長(zhǎng)25.12,面積50.24 三角形周長(zhǎng)30,面積37.5 三角形周長(zhǎng)較大,為 30 圓形面積較大,為 50
上述代碼中,半徑原本是整型,在計(jì)算過程中被作為浮點(diǎn)型來使用,其圓的面積和周長(zhǎng)都是浮點(diǎn)型。而面積和周長(zhǎng)計(jì)算之后又通過顯式轉(zhuǎn)換而轉(zhuǎn)換為整型參與比較,使用條件運(yùn)算符獲取周長(zhǎng)和面積較大的圖形及其周長(zhǎng)的面積的值。
- jQuery EasyUI網(wǎng)站開發(fā)實(shí)戰(zhàn)
- C和C++安全編碼(原書第2版)
- AIRAndroid應(yīng)用開發(fā)實(shí)戰(zhàn)
- 物聯(lián)網(wǎng)系統(tǒng)開發(fā):從0到1構(gòu)建IoT平臺(tái)(第2版)
- 劍指MySQL:架構(gòu)、調(diào)優(yōu)與運(yùn)維
- Python入門很輕松(微課超值版)
- Python應(yīng)用與實(shí)戰(zhàn)
- INSTANT Apache Hive Essentials How-to
- JavaWeb從入門到精通(視頻實(shí)戰(zhàn)版)
- Learning ROS for Robotics Programming
- jMonkeyEngine 3.0 Beginner’s Guide
- Learning Perforce SCM
- Python程序員面試算法寶典
- 編程真好玩:從零開始學(xué)網(wǎng)頁設(shè)計(jì)及3D編程
- Mastering Docker(Second Edition)