- ASP.NET動態(tài)網站開發(fā)實戰(zhàn)教程
- 張梅 陳廣祥 蘇希
- 1565字
- 2020-11-27 17:49:03
2.7 表達式和運算符
表達式,是由數字、算符、數字分組符號(括號)、自由變量和約束變量等以能求得數值的有意義排列方法所得的組合。表達式是運算符和操作符的序列。運算符是個簡明的符號,包括實際中的加減乘除,它告訴編譯器在語句中實際發(fā)生的操作,而操作數為操作執(zhí)行的對象。運算符和操作數組成完整的表達式。
2.7.1 運算符類型
在大部分情況下,對運算符類型的分類都是根據運算符所使用的操作數的個數來分類的,一般可以分為如下3類。
一元運算符:只使用一個操作數,如(?。?;自增運算符(++)等,如i++。
二元運算符:使用兩個操作數,如最常用的加減法,如i+j。
三元運算符:三元運算符只有一個(?:)。
除了按操作數個數來分以外,運算符還可以按照操作數執(zhí)行的操作類型來分,見表2-5。
表2-5 常用的運算符
1.算術運算符
算術運算符用于創(chuàng)建和執(zhí)行數學表達式,以實現加、減、乘、除等基本操作,示例代碼如下:
注意:當除數為0,系統(tǒng)會拋出DivideByZeroException異常,在程序開發(fā)中應該避免出現邏輯錯誤,因為編譯器不會檢查邏輯錯誤,只有在運行中才會提示相應的邏輯錯誤并拋出異常。
2.關系運算符
關系運算符用于創(chuàng)建一個表達式,該表達式用來比較兩個對象并返回布爾值。示例代碼如下:
關系運算符如“>”,“<”,“>=”,“<=”等同樣是比較兩個對象并返回布爾值。
初學者很容易錯誤的使用關系運算符中的“==”,因為初學者通常會將等于運算符編寫為“=”,示例代碼如下所示。
在這里,運算符“=”不等于“==”?!?”的意義是給一個變量賦值,而“==”是比較兩個變量的值是否相等。
3.邏輯運算符
邏輯運算符和布爾類型組成邏輯表達式。NOT運算符“!”使用單個操作數,用于轉換布爾值,即取非。C#的與運算符是“&&”。該運算符使用兩個操作數做與運算,當有一個操作數的布爾值為false時,則返回false。C#中也使用“||”運算符來執(zhí)行或運算,當有一個操作數的布爾值為true時,則返回true。在邏輯運算符中還包括異或運算符“^”,該運算符確定操作數是否相同,若操作數的布爾值相同,則表達式將返回false。示例代碼如下:
注意:雖然C#不支持隱式的轉換int到bool類型,但是Convert.ToBoolean靜態(tài)方法提供了實現,任何非0的參數都將返回true。
4.位運算符
位運算符通常使用位模式來操作整數類型,這些位運算符非常實用。位運算符包括“<<”、“>>”、“&”、“|”、“^”和“~”。左移位運算符“<<”將整型中的位左移指定位數,每一次左移,整型變量的值將乘以2,左移操作將舍棄移出的所有位,并用0來填充移入的位。同樣,右移運算符“>>”也將操作數右移,每一次右移,整型變量的值將除以“2”。“&”運算符通過逐位執(zhí)行邏輯與運算,從而生成新的操作數,與運算中,兩個對應的值,若有一個值為0,則全部為0?;蜻\算符“|”的使用方法和原理和與運算符“&”基本相同,其區(qū)別在于使用的是或運算,當有一個值為1,則結果為1。異或運算符“^”的用法和與位運算符類似,其區(qū)別在于當兩個值相同時,執(zhí)行計算的結果為0,否則為1。取補運算符“~”將生成整型類型的補碼。如原值中的1將變?yōu)?,而0則變?yōu)?。位運算符原理如圖2-1~圖2-5所示。
圖2-1 左移
圖2-2 AND位運算
圖2-3 OR位運算
圖2-4 XOR位運算
圖2-5 取補位運算
5.條件運算符
條件運算符“?:”需要3個操作數,示例代碼如下:
上述代碼中,使用了條件運算符“?:”。條件運算符“?:”會執(zhí)行第一個條件,若條件成立,則返回運算符“:”前的一個操作數的數值,否則返回運算符“:”后的操作數的數值。上述代碼中,變量ifisTrue為true,則返回“true”。
2.7.2 運算符的優(yōu)先級
開發(fā)人員需要經常創(chuàng)建表達式來執(zhí)行應用程序的計算,簡單的有加減法,復雜的有矩陣、數據結構等,在創(chuàng)建表達式時,往往需要一個或多個運算符。在多個運算符之間的運算操作時,編譯器會按照運算符的優(yōu)先級來控制表達式的運算順序,然后再計算求值。表達式中常用的運算符的運算順序見表2-6。
表2-6 運算符優(yōu)先級