運算符與表達式_第1頁
運算符與表達式_第2頁
運算符與表達式_第3頁
運算符與表達式_第4頁
運算符與表達式_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1第第3章章 運算符與表達式運算符與表達式基本運算符及其表達式基本運算符及其表達式混合運算時數(shù)據(jù)類型的轉(zhuǎn)換混合運算時數(shù)據(jù)類型的轉(zhuǎn)換23.1 基本運算符及其表達式基本運算符及其表達式3.1.1 C語言運算符概述語言運算符概述運算運算:對數(shù)據(jù)的加工,被加工的數(shù)據(jù)稱運算量或操作數(shù)。運算符:運算符:是一種向編譯程序說明一個特定的數(shù)學(xué)或邏輯運算的符號。表達式:表達式:由運算符和運算量組成,用來描述運算加工的數(shù)據(jù)、加工順序、具體操作。運算符優(yōu)先級:運算符優(yōu)先級:表達式中優(yōu)先級較高的運算符先于優(yōu)先級較低的運算符進行運算,相同時依據(jù)運算符的結(jié)合性。運算符結(jié)合性:運算符結(jié)合性:有左結(jié)合性和右結(jié)合性兩種。例 :

2、5+2-3 左結(jié)合性左結(jié)合性 x=y=z 右結(jié)合性右結(jié)合性3C運算符算術(shù)運算符:(算術(shù)運算符:(+ - + - * * / % + - / % + -)關(guān)系運算符:(關(guān)系運算符:( = != = !=)邏輯運算符:(!邏輯運算符:(! & |& |)位運算符位運算符 :(:( | & | &)賦值運算符:(賦值運算符:(= = 及其擴展)及其擴展)條件運算符:(條件運算符:(?:?:)逗號運算符:(逗號運算符:(, ,)指針運算符:(指針運算符:(* * & &)求字節(jié)數(shù)求字節(jié)數(shù) :(:(sizeofsizeof)強制類型轉(zhuǎn)換:(類型)強制類型轉(zhuǎn)

3、換:(類型)分量運算符:(分量運算符:(. -. -)下標運算符:(下標運算符:()其它其它 :(:(( ) -( ) -)4學(xué)習(xí)運算符應(yīng)學(xué)習(xí)運算符應(yīng)注意注意:l 運算符的功能。運算符的功能。l 與運算量的關(guān)系:與運算量的關(guān)系:運算量的個數(shù)運算量的個數(shù)(是幾目或幾元運算符是幾目或幾元運算符)。運算量的類型。運算量的類型。l 運算符的優(yōu)先級別運算符的優(yōu)先級別(先高后低先高后低)。l 結(jié)合方向結(jié)合方向(在運算量兩側(cè)運算符優(yōu)先級相同時,則在運算量兩側(cè)運算符優(yōu)先級相同時,則按結(jié)合方向順序處理按結(jié)合方向順序處理)。l 表達式值的類型表達式值的類型(在不同類型的數(shù)據(jù)進行運算時,在不同類型的數(shù)據(jù)進行運算時,

4、要進行數(shù)據(jù)類型的轉(zhuǎn)換,要注意結(jié)果值的類型要進行數(shù)據(jù)類型的轉(zhuǎn)換,要注意結(jié)果值的類型)。53.1.2 算術(shù)運算符及其表達式算術(shù)運算符及其表達式1. 算術(shù)運算符算術(shù)運算符(1)基本算術(shù)運算符)基本算術(shù)運算符 + - * / %功能功能:加、減、乘、除、取余。目數(shù)目數(shù):都是雙目運算符。優(yōu)先級優(yōu)先級:先乘除后加減。 * / % 高于+ -結(jié)合方向結(jié)合方向:自左至右。注意:注意:u%運算要求運算量必須為整型數(shù)據(jù)。運算要求運算量必須為整型數(shù)據(jù)。u/運算若運算量均為整型則結(jié)果也為整型(舍去小數(shù))。運算若運算量均為整型則結(jié)果也為整型(舍去小數(shù))。u+、-、*、/運算時,運算量有實數(shù)則結(jié)果為運算時,運算量有實數(shù)則

5、結(jié)果為double型。型。u字符型數(shù)據(jù)可與數(shù)值型數(shù)據(jù)混合運算。字符型數(shù)據(jù)可與數(shù)值型數(shù)據(jù)混合運算。例 5/2 = 5/2.0 = 1%10 = 5%1 = 5.5%2例 5/2 = 2 5/2.0 = 2.5 1%10 = 1 5%1 = 0 5.5%2 ()6(2)自加、自減運算符)自加、自減運算符 + -功能功能:前置:+i;-i;在使用i之前i值先加/減1。后置:i+;i-;在使用i之后,i值再加/減1。目數(shù)目數(shù):均為單目運算符,且要求運算量為單個變量。優(yōu)先級優(yōu)先級:高于基本算術(shù)運算符的優(yōu)先級。結(jié)合方向結(jié)合方向:右結(jié)合性。例 a=5; b=+a; a=5; b=+a; a=5; b=a+;

6、 a=5; b=a+; a=5; printf(“%d”,+a a=5; printf(“%d”,+a); ); a=5; printf(“%d”,a a=5; printf(“%d”,a+); +); a=3;b=5;c=(+a) a=3;b=5;c=(+a)* *b; b; a=3;b=5;c=(a+) a=3;b=5;c=(a+)* *b;b; /b=6,a=6/b=6,a=6/b=5,a=6/b=5,a=6/6/6/5/5/c=20,a=4/c=20,a=4/c=15,a=4/c=15,a=4(3)正負號運算符)正負號運算符 + -功能:功能:改變符號位。目數(shù):目數(shù):單目。優(yōu)先級:優(yōu)先

7、級:與自加、自減運算符同級。結(jié)合方向:結(jié)合方向:右結(jié)合性。則:j=-i+ 等價于 j=-(i+)72. 算術(shù)表達式算術(shù)表達式定義定義:由算術(shù)運算符和括號把運算量連接起來的式子。表達式運算時,若一個運算符兩側(cè)的數(shù)據(jù)類型不同,先自動進行類型轉(zhuǎn)換再進行運算。如:如:int i=1; float f=1.0; 則則 i + f1.0 + 1.0 = 2.083.1.3 賦值運算符及其表達式賦值運算符及其表達式1. 簡單賦值符及其表達式簡單賦值符及其表達式功能功能:將一個數(shù)據(jù)(常量或表達式)賦給一個變量。一般形式一般形式: 變量=表達式目數(shù):目數(shù):雙目。結(jié)合方向:結(jié)合方向:右結(jié)合性。注意注意:若賦值運算

8、符兩側(cè)的數(shù)據(jù)類型不同,系統(tǒng)將自動進行數(shù)據(jù)類型的轉(zhuǎn)換,把賦值號右邊的類型轉(zhuǎn)換成左邊的類型。 實型數(shù)據(jù)賦值給整型變量 int i=2.52 整型數(shù)據(jù)賦值給實型變量 float i=1 字符型數(shù)據(jù)賦值給整型變量 int i=A 整型數(shù)據(jù)賦值給字符型變量 char i=305 i=2i=1.0i=65i=2例 (1) x=3+5 (2) c=d+2 (3) a=(x=6)/(y=3) (4) w=sin(a)+sin(b)92. 復(fù)合賦值符及其表達式復(fù)合賦值符及其表達式分類:分類:復(fù)合算術(shù)賦值符和復(fù)合位運算賦值符。一般形式:一般形式: 等價于:= 注意:注意:復(fù)合運算符是一個運算符,但功能上是兩個運算

9、符的組合。例如:例如: a+=b 相當(dāng)于相當(dāng)于 a=a+b a*=b 相當(dāng)于相當(dāng)于 a=a*b a*=b+c 相當(dāng)于相當(dāng)于 a=a*(b+c) 而不是而不是 a=a*b+c練習(xí)練習(xí):設(shè)設(shè) int a=2;(1)計算表達式)計算表達式a+=a-=a*2的值的值(2)計算表達式)計算表達式a+=a-=a*=3的值的值 10練習(xí)練習(xí):計算下列各個表達式的值計算下列各個表達式的值(1)x=y=z=3; (2)y=(x=8)+10;(3)x=(n=2)*(m=3);(4)a=(b=10)/(c=2);注意:注意:l賦值運算符的優(yōu)先級低于算術(shù)運算符、關(guān)系運算符和邏輯運算符。如:x=32l賦值表達式具有右結(jié)

10、合性。如:x=y=6/2l賦值表達式中的表達式可以是一個賦值表達式。l賦值表達式左側(cè)必須是變量,而不能為常量或表達式;3=x x+y=2031865113.1.4 關(guān)系運算符及其表達式關(guān)系運算符及其表達式關(guān)系運算符:關(guān)系運算符: = = !=目數(shù):目數(shù):雙目。結(jié)合方向結(jié)合方向:左結(jié)合性。優(yōu)先級優(yōu)先級:低于算術(shù)運算符,高于賦值運算符; 且、 、=相同并高于= = 、!=; = = 、!=相同。關(guān)系表達式關(guān)系表達式:一般形式一般形式:;表達式的值表達式的值:是邏輯值“真”和“假”,TC中1表示“真”,0表示“假”注意注意:u應(yīng)避免對實數(shù)作=或!=的判斷,因為實數(shù)以近似值表示,存在存儲誤差,可采用f

11、abs(表達式)y; 1 (2)x=z;0(3)y+zy)=z;1 (6) m=xyz;0 (7) n=x+(yz);5 若若a=0; b=0.5; x=0.3; 則則 a=x278的值為的值為 ? 例如例如:(1)表達式:)表達式:1.0/3.0*3.0= =1.0 結(jié)果為結(jié)果為 0 可改寫為:可改寫為:fabs(1.0/3.0*3.0-1.0)1e-6 (2)int x=2,y=3; 表達式表達式 x=y 的值為?的值為? 表達式表達式x= =y的值為?的值為?(3)int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a no

12、t equal to b”);30123.1.5 邏輯運算符及其表達式邏輯運算符及其表達式 C語言中,沒有邏輯類型數(shù)據(jù),如果運算量為非0,則認為“邏輯真”, 運算量為0,則認為“邏輯假”。1. 邏輯運算符:邏輯運算符:! & |邏輯非:單目、右結(jié)合性。 int a=6,b=4; 則 !a 為 0 , !(ab)為 1邏輯或、邏輯與:雙目、左結(jié)合性。 int a=6,b=4,c=2; 則a&b 為1,(a1)為0 a|b為1,(ab)|(bc)為1, (ab)|(bc)為0 優(yōu)先級優(yōu)先級:!高于&,而&高于|。!高于算術(shù)運算符,&和|低于關(guān)系運算符。2.

13、邏輯表達式邏輯表達式一般形式:一般形式:; 其中表達式又可以為邏輯表達式,即形成嵌套。表達式的值表達式的值是式中各種邏輯運算的最后值。練習(xí)練習(xí):假設(shè):假設(shè) x=3;y=6;求解下列表達式的值求解下列表達式的值 !x x&y x|y !x&y 4&0|2 53&2|8b)&(n=cd); 后:后: m的值為的值為 , n的值為的值為 。01143.1.6 位運算符及其表達式位運算符及其表達式位運算位運算指參與運算的量按二進制位進行運算,參與位運算的運算量以補碼形式出現(xiàn)。位邏輯運算符位邏輯運算符1.& (按位與按位與):雙目、左結(jié)合性。2.| (按位

14、或按位或):雙目、左結(jié)合性。3. (按位非(按位非):單目、右結(jié)合性(符號位也取反)。4.(按位異或):(按位異或):雙目、左結(jié)合性。異或指當(dāng)參與運算的兩個數(shù)對應(yīng)的二進制位相異時,結(jié)果為1,相同時,結(jié)果為0。移位運算符移位運算符5.(右移):(右移):雙目、左結(jié)合性。15例:main( ) int a=10, b=8; printf(%d %dn, , a|b); printf(%d %dn, ab, ); 輸出結(jié)果:輸出結(jié)果:16例:例:main( ) int a=257,b; b=a&255; printf(%d %dn, a); printf(%d %dn, b); 輸出結(jié)果:輸

15、出結(jié)果:17main( ) int a=10, b=2; printf(%d %dn, , ); 輸出結(jié)果:輸出結(jié)果:18注意:注意: 位運算符的優(yōu)先級參考位運算符的優(yōu)先級參考P286附錄附錄C。 位運算符的運算對象只能是位運算符的運算對象只能是整型數(shù)據(jù)整型數(shù)據(jù)或或字符型數(shù)據(jù)字符型數(shù)據(jù),不能是實型數(shù)據(jù),不能是實型數(shù)據(jù) 運算對象一律按二進制運算對象一律按二進制補碼補碼參加運算,參加運算,并并按按位位進行運算進行運算 位運算的結(jié)果是一個位運算的結(jié)果是一個整型數(shù)據(jù)整型數(shù)據(jù)19注意注意:l條件運算符可嵌套,如: y=x0?1:x0?1:(x2?1:1.5 3.22?1:33.1.7 條件運算符及其表達

16、式條件運算符及其表達式一般形式一般形式:?:;運算規(guī)則:運算規(guī)則:依據(jù)表達式1的值決定下一步求表達式2還是表達式3的值,并把該值作為整個表達式的值。目數(shù):目數(shù):三目(唯一)。優(yōu)先級:優(yōu)先級:低于算術(shù)運算符和關(guān)系運算符,但高于賦值運算符。結(jié)合方向:結(jié)合方向:右結(jié)合性。 例如:例如:int a=3,b=5,m; m=ab?a:b;求解求解m的值?的值?思考:思考:(1)對于任意的)對于任意的a,b ,m的值具有什么意義?的值具有什么意義?(2)怎樣用)怎樣用m表示表示a,b的最小值?的最小值?20213.1.8 逗號運算符和逗號運算符和sizeof運算符運算符1.逗號運算符逗號運算符 ,功能功能:

17、將若干表達式組合成一個表達式。:將若干表達式組合成一個表達式。一般形式一般形式:表達式:表達式1,表達式表達式2,表達式表達式n;求解過程求解過程:先求表達式:先求表達式1,再求表達式,再求表達式2,依此類推,最后求,依此類推,最后求 出表達式出表達式n的值。的值。表達式的值表達式的值:等于表達式:等于表達式n的值。的值。結(jié)合方向結(jié)合方向:左結(jié)合性。:左結(jié)合性。優(yōu)先級優(yōu)先級:低于賦值運算符。:低于賦值運算符。注意注意:l在在C語言中常用逗號作分割符。語言中常用逗號作分割符。如:如:int a=1, b, c; c = (a=3, b=4), a*b; printf(“%d, %d”, c,(a

18、+b,a/b);會輸出會輸出4, 0。l但但printf(“%d,%d”,(c,(a+b,a/b);是錯誤的。是錯誤的。222. sizeof運算符運算符功能功能:用于測試數(shù)據(jù)類型所占的字節(jié)數(shù)。:用于測試數(shù)據(jù)類型所占的字節(jié)數(shù)。一般形式一般形式: sizeof(變量名變量名) ; 或或 sizeof(類型名類型名); 或或 sizeof(表達式表達式);目數(shù)目數(shù):單目。:單目。結(jié)合方向結(jié)合方向:右結(jié)合性。:右結(jié)合性。注意注意:l 它返回變量或類型標識符所代表的存儲空間的長度。它返回變量或類型標識符所代表的存儲空間的長度。l 當(dāng)參數(shù)為表達式時,不對表達式求值,而只判斷表達式值的當(dāng)參數(shù)為表達式時,不

19、對表達式求值,而只判斷表達式值的 類型,并返回該類型占用的存儲空間大小。類型,并返回該類型占用的存儲空間大小。例:例:int a=3;printf(“%d,%d,%d,%d”,sizeof(a),sizeof(int),sizeof(a=a+4),a);結(jié)果:結(jié)果:2,2,2,3233.2.1 類型隱式轉(zhuǎn)換類型隱式轉(zhuǎn)換不同數(shù)據(jù)類型的運算量混合運算時,由編譯系統(tǒng)自動完成,不同數(shù)據(jù)類型的運算量混合運算時,由編譯系統(tǒng)自動完成,遵循以下規(guī)則:遵循以下規(guī)則: 若參與運算的運算量類型不同,則先轉(zhuǎn)換成同一類型再若參與運算的運算量類型不同,則先轉(zhuǎn)換成同一類型再進行運算。進行運算。 轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進行,以保證精度不降低。轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進行,以保證精度不降低。 所有浮點運算都以雙精度進行,即所有浮點運算都以雙精度進行,即float自動轉(zhuǎn)換為自動轉(zhuǎn)換為double。 char型和型和short型數(shù)據(jù)參與運算時,必須先轉(zhuǎn)化為型數(shù)據(jù)參與運算時,必須先轉(zhuǎn)化為int型。型。 賦值運算中,賦值號兩邊的運算量類型不同時,右側(cè)的賦值運算中,賦值號兩邊的運算量類型不同時,右側(cè)的運算量

溫馨提示

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

評論

0/150

提交評論