高級語言程序設計-從C到C++(第二版)課件:運算符與表達式_第1頁
高級語言程序設計-從C到C++(第二版)課件:運算符與表達式_第2頁
高級語言程序設計-從C到C++(第二版)課件:運算符與表達式_第3頁
高級語言程序設計-從C到C++(第二版)課件:運算符與表達式_第4頁
高級語言程序設計-從C到C++(第二版)課件:運算符與表達式_第5頁
已閱讀5頁,還剩18頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

3.1概述3.2算術運算符和算術表達式3.3賦值運算符和賦值表達式3.4自增與自減運算符及其表達式3.5關系運算符和關系表達式3.6邏輯運算符和邏輯表達式3.7逗號運算符及逗號表達式3.8隱式類型轉換3.9強制類型轉換3.1概述運算符(operator)就是一些特定的符號,用來表示對數據執行的特定操作,也稱作操作符。C語言中的運算符,根據參與運算對象的多少,可分為單目運算符(或稱作一元運算符)、雙目運算符(或稱作二元運算符)、三目運算符(或稱作三元運算符);根據參與運算的對象的結合方向,可以分為從左向右和從右向左兩類;根據實現運算的作用不同,可分為算術運算符、賦值運算符、邏輯運算符、關系運算符、條件運算符、逗號運算符、位操作運算符等等。本節將重點介紹一些基本而且常用的運算符,其他運算符在后續章節的學習中將陸續介紹。表達式(expression)最基本的形式就是一個數據,也稱為操作數。操作數可以是任意類型的常量或變量。將操作數與運算符結合,可以構建一個新的表達式,繼而使用多個運算符連接多個操作數形成更為復雜的表達式。C語言的表達式由運算符、常量、變量所組成。表達式的結尾不能加分號。當一個表達式由多個不同運算性質的操作符和多個不同數據類型的操作數構成時,選擇不同的運算順序可能會得出不同甚至錯誤的結果。因此,C語言通過規定運算符的“優先級”和“結合性”來保證運算結果的正確性和唯一性。在對表達式求值時,應按運算符優先級的高低次序執行。由于乘法運算符“*”比加法運算符“+”的優先級高,因此先計算子表達式“b*c”的結果,再用該結果與a相加。如果操作數兩側的運算符優先級相同,則按運算符的結合性處理。由于加法運算符“+”和減法運算符“-”同屬算術運算符,且優先級相同,而算術運算符的結合性為“從左至右”,因此先計算子表達式“a+b”的結果,再用該結果與c相減。表達式的名稱由表達式中優先級最低的運算符的名稱決定。表達式在通過運算實現特定功能的同時,本身也將獲得一個確定的值。表達式與語句的區別在于表達式的結尾不加分號,而語句必須以分號標識結束。由“表達式”加“分號”構成的語句,稱為表達式語句。3.2算術運算符和算術表達式算術運算符為雙目運算符,結合性為從左至右,包括?+、-、*、/、%。其中,運算符%稱作模運算符或者求余運算符。算術運算符的優先級為:算術運算符是程序設計中使用最多的一類運算符,使用方法類似于數學上的四則運算,但有兩個特點需要注意:(1)除法運算符“/”連接的兩個操作數均為整型數據時,結果向零取整,不進行四舍五入,直接舍去小數部分。只有除法運算符“/”連接的兩個操作數中有浮點型數據時,才會出現小數部分。(2)求余運算符“%”連接的兩個操作數必須同為整型數據。除了運算符“%”只能連接整型數據外,其他所有算術運算符連接的操作數都可以是任意的數據類型,計算機以這些數據所代表的數值參與運算,算術表達式的運算結果為數值。3.3賦值運算符和賦值表達式賦值運算符為雙目運算符,結合性為從右至左,包括賦值運算符(=)和復合賦值運算符(*=、/=、%=、+=、-=)。賦值運算符的優先級低于算術運算符。賦值運算是將運算符右邊操作數的值賦給左邊操作數。因此,賦值運算符左邊的操作數必須是變量(有接收數據的存儲單元),右邊的操作數可以是常量、變量以及表達式,只要保證有確定的值就可以。整個賦值表達式的值就是執行賦值運算后左邊操作數的值。使用復合運算符的目的是簡化程序的書寫,使程序更加精煉,同時也可以提高編譯效率。當賦值運算符兩側的操作數類型不一致時,系統自動將右操作數的類型轉換為左操作數(變量)的類型。發生數據類型轉換時,需要注意轉換前后的取值范圍是否存在越界。3.4自增與自減運算符及其表達式自增與自減運算符為單目運算符,結合性為從右至左,包括?++?和?--。自增與自減運算符的優先級大于算術運算符。自增運算符“++”的作用是實現對操作數的值加1,自減運算符“--”的作用是實現對操作數的值減1。表達式的值即為操作數更新后的值。自增與自減運算符要求操作數的值是允許被改變的,即操作數必須是變量(更新后的值能夠被存儲)。例如:以變量i為例,自增與自減運算符有兩種使用形式,即前綴運算符和后綴運算符。例如:i++?與?++i(或i--?與?--i)在各自作為一個獨立完整的表達式時,從結果上看并沒有區別。例如:然而,當i++?與?++i(或i--?與?--i)作為表達式或語句的一個組成部分時,區別就表現出來了。執行表達式?++i,先將i值加1,再以更新后的i值作為該表達式的值參與下一步運算(即“先改變,后使用”);執行表達式i++,先以i的初始值作為該表達式的值參與下一步運算,再將i值加1(即“先使用,后改變”)。例如:自增、自減運算符常用于循環控制變量的遞增或者遞減,也可用于指針變量,使指針指向上一個或下一個地址。3.5關系運算符和關系表達式關系運算符為雙目運算符,結合性為從左至右,包括?>、<、>=、<=、==、!=。其中,前四個表示的關系分別是大于、小于、大于或等于、小于或等于,其含義與在數學上使用的一樣。而符號?==?表示等于,即判斷兩個操作數是否相等,這一點與在前面的章節中介紹的賦值運算符?=?完全不同,這也是初學者最容易犯錯誤的地方。符號?!=?表示不等于,即判斷或者比較兩個參與運算的操作數是否不相等。關系指的是參與運算的兩個操作數之間的關系。操作數可以是變量,也可以是常量或表達式,但是操作數必須有確定的值。關系運算符的優先級為:關系運算符的優先級低于算術運算符,高于賦值運算符,所以有下列表達式:幾個關系運算符的優先級也不同,其中,運算符?>、<、>=、<=?的優先級相同,并且均高于運算符?==?與?!=?的優先級,而運算符?==?與?!=?的優先級相同。因此,有下列表達式:上述兩個表達式分別表示:a>b==c,先將a與b進行比較,即判斷a是否大于b,之后將兩者比較的結果再與c進行是否相等的比較。a!=b>c,先將b與c進行比較,即判斷b是否大于c,之后將兩者比較的結果再與a進行是否不等的比較。關系表達式用于判斷兩個操作數之間的關系是否成立,如果關系成立,則表達式的結果為真(true),即表達式的值為1;如果關系不成立,則表達式的結果為假(false),即表達式的值為0。此外,還規定了表達式的值為int類型。簡單地說,關系表達式的值不是整型數值1就是整型數值0。3.6邏輯運算符和邏輯表達式邏輯運算符包含一個單目運算符(!)和兩個雙目運算符(&&、||),用邏輯運算符將操作數連接起來就構成邏輯表達式。邏輯運算符的優先級為:邏輯表達式與關系表達式一樣,常用于選擇結構中的條件判斷。邏輯運算符不關心操作數的值具體為多少,只需要知道操作數的值是否為0,將值為0的操作數轉換為邏輯值“假”,將值為非0的操作數轉換為邏輯值“真”。整個邏輯表達式的結果只有兩個:1(真)或者0(假)。1.邏輯與運算符&&符號&&表示邏輯與,相當于中文的“且”。其優先級低于邏輯非(?!?)而高于邏輯或(?||?),結合性為從左至右。&&為雙目運算符,左右兩邊操作數的值全部為真(值為非0)時,表達式的結果才為真(值為1),否則表達式的結果為假(值為0),即“全真才真”。2.邏輯或運算符?||符號?||?表示邏輯或,相當于中文的“或”。其優先級是邏輯運算符中最低的,結合性為從左至右。||?為雙目運算符,左右兩邊操作數的值全部為假(值為0)時,表達式的結果才為假(值為0),否則表達式的結果為真(值為1),即“有真就真”。3.邏輯非運算符!符號?!?表示邏輯非,相當于中文的“非”,為單目運算符,其優先級與同為單目運算符的自增自減運算符級別相同。不但高于同為邏輯運算符的?&&?和?||,還高于算術運算符、關系運算符以及賦值運算符。其結合性也與所有的單目運算符相同,為從右至左。運算符!的作用是對操作數的值取反。如果操作數的值為0?(假),則表達式的結果為1?(真);如果操作數的值為非0?(真),則表達式的結果為0?(假)。針對邏輯運算有相應的真值表,以操作數a、b為例,與邏輯運算符組合后的各種可能結果如表3-1所示。3.7逗號運算符及逗號表達式在C語言中,逗號有兩種用途:一種是作為分隔符使用。比如,在下列語句中分隔多個同類型的變量或多個參數:一種是作為運算符使用。使用逗號運算符連接兩個表達式形成一個逗號表達式,其一般形式為逗號運算符是所有運算符中優先級別最低的,結合性為從左至右。逗號運算符又稱為“順序求值運算符”,逗號表達式按照從左至右的順序對運算符連接的各個表達式逐一求解,即先計算表達式1的值,再計算表達式2的值,依次計算,直到計算完表達式n的值,而整個逗號表達式的值即為表達式n的值。3.8隱式類型轉換在對由運算符連接不同類型數據構成的表達式進行計算之前,首先要將運算符連接的不同類型數據轉換為同一類型,這一類型轉換過程由系統自動完成,稱為“隱式類型轉換”。隱式類型轉換的規則遵循將“短”的數據類型轉換為“長”的數據類型,精度低的向精度高的轉換,取值范圍小的向取值范圍大的轉換,以提高運算精度。其具體實現如圖3-2所示。圖中向右的箭頭表示轉換方向,即在發生數據類型轉換時,char類型和short類型的數據都必須先轉換為int類型的;int類型的數據必須轉換為unsigned類型的;float類型的數據必須轉換為double類型的。綜上所述,如果short型數據與float型數據進行混合運算,應先將兩個類型的數據一同轉換為double類型的。3.9強制類型轉換除了依靠系統自動實現隱式類型轉換外,程序設計者還可以利用強制類型轉換將一個表達式轉換為程序所需要的數據類型。強制類型轉換的一般形式為強制類型轉換運算符為單目運算符,其優先級與結合性和同

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論