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

下載本文檔

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

文檔簡介

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

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

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

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

5、結果為double型。型。u字符型數據可與數值型數據混合運算。字符型數據可與數值型數據混合運算。例 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。目數目數:均為單目運算符,且要求運算量為單個變量。優先級優先級:高于基本算術運算符的優先級。結合方向結合方向:右結合性。例 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)正負號運算符)正負號運算符 + -功能:功能:改變符號位。目數:目數:單目。優先級:優先

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

8、符兩側的數據類型不同,系統將自動進行數據類型的轉換,把賦值號右邊的類型轉換成左邊的類型。 實型數據賦值給整型變量 int i=2.52 整型數據賦值給實型變量 float i=1 字符型數據賦值給整型變量 int i=A 整型數據賦值給字符型變量 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. 復合賦值符及其表達式復合賦值符及其表達式分類:分類:復合算術賦值符和復合位運算賦值符。一般形式:一般形式: 等價于:= 注意:注意:復合運算符是一個運算符,但功能上是兩個運算

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

10、合性。如:x=y=6/2l賦值表達式中的表達式可以是一個賦值表達式。l賦值表達式左側必須是變量,而不能為常量或表達式;3=x x+y=2031865113.1.4 關系運算符及其表達式關系運算符及其表達式關系運算符:關系運算符: = = !=目數:目數:雙目。結合方向結合方向:左結合性。優先級優先級:低于算術運算符,高于賦值運算符; 且、 、=相同并高于= = 、!=; = = 、!=相同。關系表達式關系表達式:一般形式一般形式:;表達式的值表達式的值:是邏輯值“真”和“假”,TC中1表示“真”,0表示“假”注意注意:u應避免對實數作=或!=的判斷,因為實數以近似值表示,存在存儲誤差,可采用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 結果為結果為 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語言中,沒有邏輯類型數據,如果運算量為非0,則認為“邏輯真”, 運算量為0,則認為“邏輯假”。1. 邏輯運算符:邏輯運算符:! & |邏輯非:單目、右結合性。 int a=6,b=4; 則 !a 為 0 , !(ab)為 1邏輯或、邏輯與:雙目、左結合性。 int a=6,b=4,c=2; 則a&b 為1,(a1)為0 a|b為1,(ab)|(bc)為1, (ab)|(bc)為0 優先級優先級:!高于&,而&高于|。!高于算術運算符,&和|低于關系運算符。2.

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

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

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

16、式條件運算符及其表達式一般形式一般形式:?:;運算規則:運算規則:依據表達式1的值決定下一步求表達式2還是表達式3的值,并把該值作為整個表達式的值。目數:目數:三目(唯一)。優先級:優先級:低于算術運算符和關系運算符,但高于賦值運算符。結合方向:結合方向:右結合性。 例如:例如: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的值。的值。結合方向結合方向:左結合性。:左結合性。優先級優先級:低于賦值運算符。:低于賦值運算符。注意注意: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運算符運算符功能功能:用于測試數據類型所占的字節數。:用于測試數據類型所占的字節數。一般形式一般形式: sizeof(變量名變量名) ; 或或 sizeof(類型名類型名); 或或 sizeof(表達式表達式);目數目數:單目。:單目。結合方向結合方向:右結合性。:右結合性。注意注意:l 它返回變量或類型標識符所代表的存儲空間的長度。它返回變量或類型標識符所代表的存儲空間的長度。l 當參數為表達式時,不對表達式求值,而只判斷表達式值的當參數為表達式時,不

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

溫馨提示

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

評論

0/150

提交評論