C語(yǔ)言程序設(shè)計(jì)課件第3章課件_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件第3章課件_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件第3章課件_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件第3章課件_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件第3章課件_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2022-1-271高級(jí)語(yǔ)言程序設(shè)計(jì) 2022-1-272第三章 表達(dá)式與運(yùn)算符主講主講: : 計(jì)算機(jī)學(xué)院計(jì)算機(jī)學(xué)院 朱立華朱立華n表達(dá)式體現(xiàn)對(duì)數(shù)據(jù)的處理,由運(yùn)算符和運(yùn)算對(duì)象組成表達(dá)式體現(xiàn)對(duì)數(shù)據(jù)的處理,由運(yùn)算符和運(yùn)算對(duì)象組成 n掌握每種運(yùn)算符的以下知識(shí):掌握每種運(yùn)算符的以下知識(shí):對(duì)運(yùn)算對(duì)象的要求對(duì)運(yùn)算對(duì)象的要求運(yùn)算符的結(jié)合性運(yùn)算符的結(jié)合性運(yùn)算符的優(yōu)先級(jí)運(yùn)算符的優(yōu)先級(jí)運(yùn)算結(jié)果的特性運(yùn)算結(jié)果的特性n有多種運(yùn)算符的復(fù)雜表達(dá)式的計(jì)算順序及計(jì)算結(jié)果有多種運(yùn)算符的復(fù)雜表達(dá)式的計(jì)算順序及計(jì)算結(jié)果n數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換規(guī)則及強(qiáng)制轉(zhuǎn)換的方法數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換規(guī)則及強(qiáng)制轉(zhuǎn)換的方法n表達(dá)式實(shí)現(xiàn)對(duì)數(shù)據(jù)的處理,每個(gè)表達(dá)式

2、都有唯一的值表達(dá)式實(shí)現(xiàn)對(duì)數(shù)據(jù)的處理,每個(gè)表達(dá)式都有唯一的值n表達(dá)式由表達(dá)式由運(yùn)算對(duì)象運(yùn)算對(duì)象和和運(yùn)算符運(yùn)算符組成組成n運(yùn)算對(duì)象的種類:運(yùn)算對(duì)象的種類:常量、變量、有返回值的函數(shù)調(diào)用常量、變量、有返回值的函數(shù)調(diào)用、其它表達(dá)式其它表達(dá)式n例:例:2 a rand() 2 a rand() (2+a)2+a)* *rand( )rand( )n運(yùn)算符:共運(yùn)算符:共3434種,分為種,分為1515個(gè)不同的優(yōu)先級(jí)個(gè)不同的優(yōu)先級(jí)可以理解成是不帶運(yùn)算符的最簡(jiǎn)單表達(dá)式可以理解成是不帶運(yùn)算符的最簡(jiǎn)單表達(dá)式常量表達(dá)式常量表達(dá)式變量表達(dá)式變量表達(dá)式函數(shù)表達(dá)式函數(shù)表達(dá)式帶運(yùn)算符的表達(dá)式帶運(yùn)算符的表達(dá)式n每個(gè)表達(dá)式都有

3、每個(gè)表達(dá)式都有唯一確定的值唯一確定的值, ,表達(dá)式不是左值就是表達(dá)式不是左值就是右值右值 n右值:右值:只能出現(xiàn)在賦值號(hào)(只能出現(xiàn)在賦值號(hào)(= =)右邊的表達(dá)式)右邊的表達(dá)式 n左值:左值:不是右值的表達(dá)式就是左值不是右值的表達(dá)式就是左值n左值與右值的關(guān)系:左值與右值的關(guān)系:右值只能出現(xiàn)在賦值號(hào)的右邊;右值只能出現(xiàn)在賦值號(hào)的右邊;而左值既可以出現(xiàn)在賦值號(hào)的左邊,又可以出現(xiàn)在賦而左值既可以出現(xiàn)在賦值號(hào)的左邊,又可以出現(xiàn)在賦值號(hào)的右邊。左值可以取地址值號(hào)的右邊。左值可以取地址, ,右值不可以取地址右值不可以取地址. .n例:例: 2 a rand() (2+a)*rand( ) a=b常量表達(dá)式只

4、能作為右值常量表達(dá)式只能作為右值例:例:a=a=2 2;(;(右值右值) )變量表達(dá)式為左值變量表達(dá)式為左值, ,既可在賦值號(hào)左邊也可以既可在賦值號(hào)左邊也可以在右邊在右邊, ,例:例:a a=5;(=5;(左邊左邊) b=b=a a;(;(右邊右邊)此函數(shù)表達(dá)式為右值此函數(shù)表達(dá)式為右值例:例:a a=rand( )=rand( )右值右值)此表達(dá)式只能作為右值此表達(dá)式只能作為右值例:例:b=(2+a)*rand( ); (右值右值) )賦值表達(dá)式只能作為右值賦值表達(dá)式只能作為右值例:例:c=a=b;(右值右值) (a=b)=c;(出錯(cuò)出錯(cuò))算術(shù)運(yùn)算符算術(shù)運(yùn)算符主要完成數(shù)值計(jì)算問(wèn)題,具體如下表所

5、列主要完成數(shù)值計(jì)算問(wèn)題,具體如下表所列運(yùn)算符運(yùn)算符優(yōu)先優(yōu)先級(jí)級(jí)結(jié)合結(jié)合方向方向?qū)\(yùn)算對(duì)象對(duì)運(yùn)算對(duì)象的要求的要求運(yùn)算結(jié)果特性運(yùn)算結(jié)果特性特殊說(shuō)明特殊說(shuō)明- 取負(fù)取負(fù)2 2從右從右到左到左整、實(shí)型值整、實(shí)型值運(yùn)算對(duì)象的相運(yùn)算對(duì)象的相反數(shù)反數(shù)單目運(yùn)算符單目運(yùn)算符+ 自增自增整整,實(shí)實(shí),字符字符,指針型指針型變量變量結(jié)果與變量的結(jié)果與變量的值可能一致值可能一致單目單目,分為前分為前+ 后后+- 自減自減單目單目,分為前分為前+ 后后- -* 乘乘3 3從左從左到右到右允許整型與允許整型與實(shí)型數(shù)混合實(shí)型數(shù)混合只要有只要有1個(gè)實(shí)對(duì)個(gè)實(shí)對(duì)象結(jié)果實(shí)型,象結(jié)果實(shí)型,否則整型結(jié)果否則整型結(jié)果/ 除除兩個(gè)整數(shù)相除只

6、能兩個(gè)整數(shù)相除只能得到得到整數(shù)商整數(shù)商% 取余取余僅限整型數(shù)僅限整型數(shù)整除的余數(shù)整除的余數(shù)正負(fù)號(hào)同第正負(fù)號(hào)同第1數(shù)數(shù)+ 加加4 4從左從左到右到右允許整型與允許整型與實(shí)型數(shù)混合實(shí)型數(shù)混合只要有只要有1個(gè)實(shí)對(duì)個(gè)實(shí)對(duì)象結(jié)果實(shí)型,象結(jié)果實(shí)型,否則整型結(jié)果否則整型結(jié)果- 減減例:例:int a=3,b,c; a+的表達(dá)式結(jié)果是的表達(dá)式結(jié)果是3,變量,變量a的值是的值是4;+a的表達(dá)式結(jié)果是的表達(dá)式結(jié)果是4,變量,變量a的值是的值是4;因此因此,c=a+執(zhí)行后,執(zhí)行后, c的值是的值是3,a的值是的值是4 b=+a執(zhí)行后,執(zhí)行后,b的值是的值是4,a的值也是的值也是4例:例:int a=3; -a結(jié)果為

7、結(jié)果為-3,但是變量,但是變量a的值仍為的值仍為3-2.45是是2.45的相反數(shù)的相反數(shù)例:例:int a=3,b,c; a-的表達(dá)式結(jié)果是的表達(dá)式結(jié)果是3,變量,變量a的值是的值是2;-a的表達(dá)式結(jié)果是的表達(dá)式結(jié)果是2,變量,變量a的值是的值是2;因此因此,c=a-執(zhí)行后,執(zhí)行后, c的值是的值是3,a的值是的值是2 b=-a執(zhí)行后,執(zhí)行后,b的值是的值是2,a的值也是的值也是2例:例:int a=27,b=5,c; 表達(dá)式表達(dá)式a/b結(jié)果是結(jié)果是5,而不是,而不是5.4表達(dá)式表達(dá)式27.0/b結(jié)果是結(jié)果是5.4表達(dá)式表達(dá)式27.0/5.0結(jié)果是結(jié)果是5.4例:例:int a=27,b=5,

8、c; 表達(dá)式表達(dá)式a%b結(jié)果是結(jié)果是2,表達(dá)式表達(dá)式-a%b結(jié)果是結(jié)果是-2 表達(dá)式表達(dá)式27.0%b是錯(cuò)誤的是錯(cuò)誤的例:例:表達(dá)式表達(dá)式2+3結(jié)果是結(jié)果是5表達(dá)式表達(dá)式2+3.0結(jié)果是結(jié)果是5.0表達(dá)式表達(dá)式2.0+3.0結(jié)果是結(jié)果是5.0例:例:表達(dá)式表達(dá)式3-2結(jié)果是結(jié)果是1表達(dá)式表達(dá)式3.0-2結(jié)果是結(jié)果是1.0表達(dá)式表達(dá)式3.0-2.0結(jié)果是結(jié)果是1.0n程序程序3.1 3.1 賦值表達(dá)式及算術(shù)運(yùn)算符示例賦值表達(dá)式及算術(shù)運(yùn)算符示例n#includen#include /包含隨機(jī)函數(shù)包含隨機(jī)函數(shù)rand的聲明的聲明nint main( )n int a=5,b=6,c=7;nprint

9、f(“%dn”,rand(); /顯示隨機(jī)數(shù)顯示隨機(jī)數(shù)nprint(%dn,a*(b+c)/2-2); /顯示算術(shù)表達(dá)式的值顯示算術(shù)表達(dá)式的值nprintf(%dn,a=b); /顯示賦值表達(dá)式即顯示賦值表達(dá)式即a的值的值nb=rand()%10; /混合表達(dá)式賦混合表達(dá)式賦0至至9之間的之間的1個(gè)隨機(jī)數(shù)個(gè)隨機(jī)數(shù)nprintf(“%dn”,c=a=b); /顯示賦值表達(dá)式的值即顯示賦值表達(dá)式的值即c的值的值n return 0;n413067動(dòng)動(dòng)態(tài)態(tài)演示演示過(guò)過(guò)程程關(guān)系運(yùn)算符關(guān)系運(yùn)算符主要完成表達(dá)式間的比較,比較的結(jié)果主要完成表達(dá)式間的比較,比較的結(jié)果非真即假非真即假,C C語(yǔ)語(yǔ)言中言中無(wú)邏輯

10、類型無(wú)邏輯類型,故,故用用1 1表示表示真真,0 0表示表示假假任何類型的值,只要任何類型的值,只要不等于不等于0 0,在需要作出真假判斷的場(chǎng)合就代表,在需要作出真假判斷的場(chǎng)合就代表邏輯真邏輯真。 運(yùn)算符運(yùn)算符優(yōu)先級(jí)優(yōu)先級(jí)結(jié)合結(jié)合方向方向?qū)\(yùn)算對(duì)象的要求對(duì)運(yùn)算對(duì)象的要求運(yùn)算結(jié)果特性運(yùn)算結(jié)果特性 大于大于6 6從左從左到右到右允許允許不同類型不同類型的值混合的值混合計(jì)算,運(yùn)算對(duì)象計(jì)算,運(yùn)算對(duì)象非非0就就表示表示真真值,值,0表示表示假假,當(dāng)當(dāng)類型不一致類型不一致時(shí),會(huì)自時(shí),會(huì)自動(dòng)進(jìn)行動(dòng)進(jìn)行類型轉(zhuǎn)換類型轉(zhuǎn)換為同一為同一種類型種類型 關(guān)系表達(dá)式的最終結(jié)關(guān)系表達(dá)式的最終結(jié)果只有兩個(gè)值:果只有兩個(gè)值:1

11、或或0,1表示真,表示真,0表示假表示假用用括號(hào)括號(hào)可以可以提升優(yōu)先提升優(yōu)先級(jí),級(jí),有時(shí)為了更清晰有時(shí)為了更清晰= 大于等于大于等于= 小于等于小于等于= 相等相等7 7!= 不相等不相等結(jié)論結(jié)論: :關(guān)系運(yùn)算符的優(yōu)先級(jí)關(guān)系運(yùn)算符的優(yōu)先級(jí)低于低于算術(shù)運(yùn)算符算術(shù)運(yùn)算符例:例:c(a+b)c(a+b) 可以可以寫成:寫成: ca+bcb)!=c(ab)!=c 可以寫可以寫成:成: ab!=cab!=c例:例:a=(bc)可以寫可以寫成:成: a=b=(a+b)用括號(hào)表達(dá)式的含用括號(hào)表達(dá)式的含義清楚義清楚n程序程序3.2 3.2 關(guān)系運(yùn)算示例關(guān)系運(yùn)算示例n#includen#include /包含隨

12、機(jī)函數(shù)包含隨機(jī)函數(shù)rand的聲明的聲明nint main( )n n int a=rand()%10; /產(chǎn)生產(chǎn)生3個(gè)個(gè)09的隨機(jī)數(shù)的隨機(jī)數(shù) n int b=rand()%10;n int c=rand()%10,d;n printf(“a=%d,b=%d,c=%dn”,a,b,c); /輸出輸出n printf(%dn,c=(a+b);n return 0;na=1,b=7,c=410rand( )函數(shù)產(chǎn)生一個(gè)非負(fù)隨機(jī)整數(shù),函數(shù)產(chǎn)生一個(gè)非負(fù)隨機(jī)整數(shù),產(chǎn)生一個(gè)產(chǎn)生一個(gè)a,b范圍的非負(fù)隨機(jī)整數(shù)的方范圍的非負(fù)隨機(jī)整數(shù)的方法是:法是:a+rand( )%(b-a+1) 動(dòng)動(dòng)態(tài)態(tài)演示演示過(guò)過(guò)程程邏輯運(yùn)

13、算符邏輯運(yùn)算符主要完成更復(fù)雜的條件判斷主要完成更復(fù)雜的條件判斷邏輯表達(dá)式的邏輯表達(dá)式的最終結(jié)果最終結(jié)果只有兩個(gè):只有兩個(gè):1 1表示表示真,真,0 0表示表示假假。任何類型的值,只要任何類型的值,只要不等于不等于0 0,在需要作出真假判斷的場(chǎng)合就代表在需要作出真假判斷的場(chǎng)合就代表邏輯真邏輯真,0 0代表代表邏輯假邏輯假運(yùn)算符運(yùn)算符優(yōu)先級(jí)優(yōu)先級(jí) 結(jié)合結(jié)合方向方向?qū)\(yùn)算對(duì)象的對(duì)運(yùn)算對(duì)象的要求要求運(yùn)算結(jié)果特運(yùn)算結(jié)果特性性說(shuō)明說(shuō)明! 邏輯非邏輯非2從右從右至左至左允許允許不同類型不同類型的值混合計(jì)算,的值混合計(jì)算,運(yùn)算對(duì)象運(yùn)算對(duì)象非非0就表示就表示真真值,值,0表示表示假假一定是整型,一定是整型,并且

14、只有兩并且只有兩個(gè)值個(gè)值1和和0,分別表示分別表示真真和假和假 單目運(yùn)算符單目運(yùn)算符,置,置反反運(yùn)算對(duì)象真假運(yùn)算對(duì)象真假& 邏輯與邏輯與11從左從左至右至右兩個(gè)對(duì)象兩個(gè)對(duì)象都為真都為真結(jié)果才為真結(jié)果才為真| 邏輯或邏輯或12兩個(gè)對(duì)象只要有兩個(gè)對(duì)象只要有1 1個(gè)真?zhèn)€真結(jié)果就為真結(jié)果就為真幾種運(yùn)算符的幾種運(yùn)算符的優(yōu)先級(jí)優(yōu)先級(jí): :單目單目-算術(shù)算術(shù)-關(guān)系關(guān)系-邏輯與邏輯與-邏輯或邏輯或例:例:!A 結(jié)果為結(jié)果為0 0,!(2+35)!(2+35)結(jié)果為結(jié)果為1 1例:例:(ab)&(xy) 可可以寫成:以寫成: ab&x=A&ch=Z,而不是:而不是: A=ch=ZA=chb)&(c=c*2) 0

15、,c的值仍為的值仍為7 短路短路,因?yàn)橐驗(yàn)閍b的結(jié)果為的結(jié)果為0,故,故c=c*2不執(zhí)行不執(zhí)行 (ab)&(c=c*2) 1,c的值為的值為14 不短路不短路,因?yàn)?,因?yàn)閍b的結(jié)果為的結(jié)果為1,故,故c=c*2執(zhí)行執(zhí)行 (ab)&(c=c-7) 0,c的值為的值為0 不短路不短路,因?yàn)?,因?yàn)閍b的結(jié)果為的結(jié)果為1,故,故c=c-7執(zhí)行執(zhí)行(ab) )|(c=c*5) 1,c的值仍為的值仍為7 短路短路,因?yàn)?,因?yàn)閍b)|(c=c*5) 1,c的值為的值為35 不短路不短路,因?yàn)?,因?yàn)閍b的結(jié)果為的結(jié)果為0,故,故c=c*5執(zhí)行執(zhí)行 (ab)|(c=c-7)0,c的值為的值為0 不短路不短路,因

16、為,因?yàn)閍b的結(jié)果為的結(jié)果為0,故,故c=c-7執(zhí)行執(zhí)行 假設(shè)假設(shè)已有定義:已有定義:int a=5,b=6,c=7; 下表給出了下表給出了&和和|的短路功能的短路功能練習(xí):練習(xí):設(shè)有語(yǔ)句:設(shè)有語(yǔ)句:int a = 3 , b =5, m=0; 則執(zhí)行語(yǔ)句則執(zhí)行語(yǔ)句a+b8&(m = a=3)后,后,m m的值為的值為_,_,整個(gè)表達(dá)式的值為整個(gè)表達(dá)式的值為_n程序程序3.3 3.3 邏輯運(yùn)算示例邏輯運(yùn)算示例 n#includen#include /包含隨機(jī)函數(shù)包含隨機(jī)函數(shù)rand的聲明的聲明nint main( )n n int a=1+rand()%50, b=1+rand()%50;n

17、int x=rand()/a, y=rand()/b;n printf(%d,%d,%dn,a,b,ab);n printf(%d,%d,%dn,x,y,xy);n printf(%dn,(ab)&(xy);n printf(%dn,(a=b)|(x=y);n printf(%dn,(!a)|(a!=b);n return 0;n42,18,042,18,0150,1472,1150,1472,10 00 01 1 rand( )函數(shù)產(chǎn)生一個(gè)非負(fù)隨機(jī)整數(shù),函數(shù)產(chǎn)生一個(gè)非負(fù)隨機(jī)整數(shù),產(chǎn)生一個(gè)產(chǎn)生一個(gè)a,b范圍的非負(fù)隨機(jī)整數(shù)的方范圍的非負(fù)隨機(jī)整數(shù)的方法是:法是:a+rand( )%(b-a+1)

18、動(dòng)動(dòng)態(tài)態(tài)演示演示過(guò)過(guò)程程n在算術(shù)運(yùn)算符中已提到單目運(yùn)算符在算術(shù)運(yùn)算符中已提到單目運(yùn)算符自增自增(+)(+)和和自減自減(-)(-)n自增自減運(yùn)算符的幾個(gè)特殊性:自增自減運(yùn)算符的幾個(gè)特殊性: (1)(1)這兩種運(yùn)算符專門用于改變一個(gè)變量自身的值這兩種運(yùn)算符專門用于改變一個(gè)變量自身的值( (增或減增或減1)1),因此實(shí)質(zhì)上具有因此實(shí)質(zhì)上具有賦值賦值功能,運(yùn)算對(duì)象功能,運(yùn)算對(duì)象只能是一個(gè)變量只能是一個(gè)變量。 (2)(2)對(duì)變量變化的時(shí)機(jī)取決于對(duì)變量變化的時(shí)機(jī)取決于運(yùn)算符與運(yùn)算對(duì)象的相對(duì)位置運(yùn)算符與運(yùn)算對(duì)象的相對(duì)位置,有有前后之分前后之分,+a+a和和aa為為前前+(-)+(-),a+a+和和aa為為

19、后后+(-)+(-) (3)(3)前前+或前或前是指是指先改變變量的值先改變變量的值,再用變化后的值參加運(yùn),再用變化后的值參加運(yùn)算;算;后后+或后或后是指先用未變化過(guò)的變量的值參加表達(dá)式的是指先用未變化過(guò)的變量的值參加表達(dá)式的運(yùn)算,運(yùn)算,最后再改變變量的值。最后再改變變量的值。共同點(diǎn)就是共同點(diǎn)就是變量值肯定改變變量值肯定改變 (4)(4)需要區(qū)分需要區(qū)分表達(dá)式的值和變量的值,表達(dá)式的值和變量的值,大部分情況下不是一回大部分情況下不是一回事,但是如果事,但是如果僅僅改變變量而不用它運(yùn)算,則前后無(wú)區(qū)別僅僅改變變量而不用它運(yùn)算,則前后無(wú)區(qū)別表達(dá)式表達(dá)式等價(jià)表示等價(jià)表示 表達(dá)式的值表達(dá)式的值變量的值變

20、量的值x=i+; x=i; i=i+1; 2 2i i=3 3x=+j; j=j+1; x=j; 5j=5x=i-; x=i; i=i-1; 2i=1x=-j; j=j-1; x=j; 3j=3x=(i+)+(+j); j=j+1; x=i+j; i=i+1; 7i=3,j=5x=(i-)+(-j);j=j-1; x=i+j; i=i-1; 5i=1,j=3x=x+i+; x=x+i; i=i+1; 10i=3x=x+i; x=x+ i; x=x+1; 11i=2+(+i); i=i+1; i=i+1; 4i=4i+; 或或 +i; i=i+1; 3i=3假設(shè)假設(shè)已有定義:已有定義:int x

21、=8,i=2,j=4; 下表列出了下表列出了有自增自減運(yùn)算符有自增自減運(yùn)算符的表的表達(dá)式的值及變量的值達(dá)式的值及變量的值n程序程序3.4 3.4 自增自減運(yùn)算示例自增自減運(yùn)算示例 n#includenint main( )n int i=5,j=6,k;n i+; +j; /相當(dāng)于相當(dāng)于i=i+1;j=j+1;n printf(i=%d,j=%dn,i,j);n i-; -j; /相當(dāng)于相當(dāng)于i=i-1;j=j-1;n printf(i=%d,j=%dn,i,j);n k=(i+)+(+j); /相當(dāng)于相當(dāng)于j=j+1;k=i+j; i=i+1;n printf(i=%d,j=%d,k=%dn

22、,i,j,k);n k=(i-)+(-j); /相當(dāng)于相當(dāng)于j=j-1;k=i+j; i=i-1;n printf(i=%d,j=%d,k=%dn,i,j,k); n return 0;ni=6,j=7i=6,j=7i=5,j=6i=5,j=6i=6,j=7,k=12i=6,j=7,k=12i=5,j=6,k=12i=5,j=6,k=12 動(dòng)動(dòng)態(tài)態(tài)演示演示過(guò)過(guò)程程n位運(yùn)算位運(yùn)算是對(duì)字節(jié)或字內(nèi)的是對(duì)字節(jié)或字內(nèi)的二進(jìn)制數(shù)位二進(jìn)制數(shù)位進(jìn)行測(cè)試、抽取、設(shè)置或進(jìn)行測(cè)試、抽取、設(shè)置或移位等操作,是移位等操作,是C C語(yǔ)言語(yǔ)言可對(duì)硬件編程可對(duì)硬件編程的體現(xiàn)。運(yùn)算對(duì)象只能是的體現(xiàn)。運(yùn)算對(duì)象只能是intint類

23、型類型(包括(包括charchar類型類型) )nC C中提供中提供6 6種位運(yùn)算符,其中的種位運(yùn)算符,其中的 (按位取反為單目運(yùn)算符按位取反為單目運(yùn)算符),其),其余余5 5個(gè)為雙目運(yùn)算符,具體見(jiàn)下一頁(yè)個(gè)為雙目運(yùn)算符,具體見(jiàn)下一頁(yè)n多種運(yùn)算符的優(yōu)先級(jí):多種運(yùn)算符的優(yōu)先級(jí):n單目單目-算術(shù)乘除取余算術(shù)乘除取余-算術(shù)加減算術(shù)加減-移位移位-關(guān)系關(guān)系-按位與按位與-按位按位異或異或-按位或按位或-邏輯與邏輯與-邏輯或邏輯或運(yùn)算符運(yùn)算符優(yōu)先優(yōu)先級(jí)級(jí)結(jié)合結(jié)合方向方向運(yùn)算基本方法運(yùn)算基本方法特殊用途特殊用途特殊說(shuō)特殊說(shuō)明明 按位取反按位取反 2從右從右至左至左對(duì)運(yùn)算對(duì)象每對(duì)運(yùn)算對(duì)象每1個(gè)二進(jìn)個(gè)二進(jìn)制位制

24、位01取反取反按位取反運(yùn)算經(jīng)常按位取反運(yùn)算經(jīng)常被用于被用于加密和解密加密和解密 單目單目運(yùn)運(yùn)算符算符 右移位右移位5第第1操作數(shù)的每位按操作數(shù)的每位按向向左左依次平移第依次平移第2操作數(shù)操作數(shù)指定的位數(shù)指定的位數(shù)可快速地實(shí)現(xiàn)整數(shù)可快速地實(shí)現(xiàn)整數(shù)的的除法除法運(yùn)算運(yùn)算 ,有利,有利于算法的于算法的硬件實(shí)現(xiàn)硬件實(shí)現(xiàn) 相當(dāng)于相當(dāng)于除除2的的幾次方幾次方& 按位與按位與8兩個(gè)對(duì)象對(duì)應(yīng)二進(jìn)制兩個(gè)對(duì)象對(duì)應(yīng)二進(jìn)制位均為位均為1,本位才為本位才為1可對(duì)字節(jié)中某一或可對(duì)字節(jié)中某一或幾個(gè)幾個(gè)二進(jìn)制位清二進(jìn)制位清0 按位異或按位異或 9兩個(gè)對(duì)象對(duì)應(yīng)二進(jìn)制兩個(gè)對(duì)象對(duì)應(yīng)二進(jìn)制位相同為位相同為0相異為相異為1可判斷兩個(gè)數(shù)對(duì)

25、應(yīng)可判斷兩個(gè)數(shù)對(duì)應(yīng)二進(jìn)制位的同或異二進(jìn)制位的同或異 | 按位或按位或10兩個(gè)對(duì)象對(duì)應(yīng)二進(jìn)制兩個(gè)對(duì)象對(duì)應(yīng)二進(jìn)制位有位有1個(gè)為個(gè)為1則結(jié)果為則結(jié)果為1可對(duì)字節(jié)中某一或可對(duì)字節(jié)中某一或幾個(gè)幾個(gè)二進(jìn)制位置二進(jìn)制位置1 00000101 11111010152 =3 00001111 0 00 0相當(dāng)于相當(dāng)于15/215/22 2 00001101& 00000011 00000001 00000011 00000011 00000101 00000101 00000110 00000110 | 00111111 10111111n條件運(yùn)算符條件運(yùn)算符是是C C語(yǔ)言中語(yǔ)言中唯一唯一的的1 1個(gè)個(gè)三目運(yùn)算

26、符三目運(yùn)算符n其格式為其格式為:表達(dá)式:表達(dá)式1 1?表達(dá)式表達(dá)式2 2:表達(dá)式表達(dá)式3 3n計(jì)算方法及運(yùn)算結(jié)果:計(jì)算方法及運(yùn)算結(jié)果:先先求表達(dá)式求表達(dá)式1 1得到得到非非0 0表示表示真真,得到,得到0 0表示表示假假。如果是。如果是真真,則條件表達(dá)式的值等于,則條件表達(dá)式的值等于表達(dá)式表達(dá)式2 2的值的值( (此時(shí)此時(shí)表達(dá)表達(dá)式式3 3不計(jì)算不計(jì)算) );如果是假,則條件表達(dá)式的值等于表達(dá)式;如果是假,則條件表達(dá)式的值等于表達(dá)式3 3的值的值( (此時(shí)此時(shí)表達(dá)式表達(dá)式2 2不計(jì)算不計(jì)算) )。 n優(yōu)先級(jí)優(yōu)先級(jí):1313級(jí),僅高于級(jí),僅高于逗號(hào)和賦值運(yùn)算符逗號(hào)和賦值運(yùn)算符的優(yōu)先級(jí)的優(yōu)先級(jí)n結(jié)

27、合方向結(jié)合方向:從右至左從右至左,當(dāng)有條件運(yùn)算符,當(dāng)有條件運(yùn)算符嵌套嵌套時(shí),按照從時(shí),按照從右至左右至左的順序結(jié)合。先計(jì)算第一對(duì)象的順序結(jié)合。先計(jì)算第一對(duì)象, ,根據(jù)結(jié)果再?zèng)Q定后面的運(yùn)算根據(jù)結(jié)果再?zèng)Q定后面的運(yùn)算n對(duì)運(yùn)算對(duì)象的要求對(duì)運(yùn)算對(duì)象的要求:可以是任何類型的表達(dá)式:可以是任何類型的表達(dá)式n例例:int a=1,b=2,x; 則條件運(yùn)算表達(dá)式:則條件運(yùn)算表達(dá)式:ab?(x=6):(x=7)的值是的值是?n解析解析: 以上條件表達(dá)式根據(jù)右結(jié)合原則實(shí)際上是以上條件表達(dá)式根據(jù)右結(jié)合原則實(shí)際上是: ab?(x=6):(x=7)n計(jì)算順序計(jì)算順序:先計(jì)算整個(gè)條件表達(dá)式的第一對(duì)象先計(jì)算整個(gè)條件表達(dá)式的第

28、一對(duì)象ab,結(jié)果為真結(jié)果為真,則則計(jì)算第二對(duì)象計(jì)算第二對(duì)象x=5,后面紅色括號(hào)內(nèi)的第三對(duì)象不再計(jì)算后面紅色括號(hào)內(nèi)的第三對(duì)象不再計(jì)算,因此整因此整個(gè)表達(dá)式的結(jié)果為個(gè)表達(dá)式的結(jié)果為5,變量變量x的值也是的值也是5.n注意注意: 結(jié)合方式與運(yùn)算順序并不是一回事結(jié)合方式與運(yùn)算順序并不是一回事!5 5n程序程序3.5 3.5 條件運(yùn)算示例條件運(yùn)算示例 n#includen#includenint main( )n n int a=rand()%10, b=rand()%10,c,d;n c=ab?a:b;n d=ab?a:b;n printf(a=%d,b=%dn,a,b);n printf(c=%d,

29、d=%dn,c,d); n return 0;na=1,b=7a=1,b=7c=7,d=1c=7,d=1動(dòng)動(dòng)態(tài)態(tài)演示演示過(guò)過(guò)程程n賦值賦值運(yùn)算符運(yùn)算符是是C C語(yǔ)言中語(yǔ)言中使變量獲得值使變量獲得值的運(yùn)算符,有兩大類的運(yùn)算符,有兩大類復(fù)合賦復(fù)合賦值運(yùn)算符值運(yùn)算符 : (1)(1)雙目算術(shù)運(yùn)算與賦值運(yùn)算符一起,構(gòu)成雙目算術(shù)運(yùn)算與賦值運(yùn)算符一起,構(gòu)成算術(shù)復(fù)合賦值運(yùn)算符算術(shù)復(fù)合賦值運(yùn)算符 (2)(2)雙目位運(yùn)算與賦值運(yùn)算符一起,構(gòu)成雙目位運(yùn)算與賦值運(yùn)算符一起,構(gòu)成位復(fù)合賦值運(yùn)算符位復(fù)合賦值運(yùn)算符n運(yùn)算對(duì)象運(yùn)算對(duì)象:左邊:左邊只能是變量只能是變量,右邊右邊是一個(gè)是一個(gè)表達(dá)式表達(dá)式n計(jì)算方法及運(yùn)算結(jié)果:計(jì)

30、算方法及運(yùn)算結(jié)果:表示給該表示給該變量空間賦值變量空間賦值或修改該變量空或修改該變量空間中的值,此時(shí)間中的值,此時(shí)變量變量也稱為也稱為左值左值。賦值運(yùn)算符右邊是一個(gè)表達(dá)。賦值運(yùn)算符右邊是一個(gè)表達(dá)式,其類型最好是與左值式,其類型最好是與左值類型一致類型一致, , 不一致時(shí)自動(dòng)類型轉(zhuǎn)換不一致時(shí)自動(dòng)類型轉(zhuǎn)換. .n優(yōu)先級(jí)優(yōu)先級(jí):1414級(jí),僅高于級(jí),僅高于逗號(hào)逗號(hào)的優(yōu)先級(jí)的優(yōu)先級(jí)n結(jié)合方向結(jié)合方向:從右至左從右至左, ,在在連續(xù)連續(xù)賦值時(shí),按賦值時(shí),按從右至左從右至左的順序的順序依次依次 n例例: :設(shè)設(shè)int a=1,b=2,c=5; int a=1,b=2,c=5; 計(jì)算計(jì)算 a=b=c a=b

31、=c 和和 (a=b)=c(a=b)=c先計(jì)算先計(jì)算b=cb=c,b b獲得值獲得值5 5,該賦值表達(dá)式,該賦值表達(dá)式結(jié)果結(jié)果為為b b;此結(jié)果作為賦值表達(dá)式;此結(jié)果作為賦值表達(dá)式a=b=ca=b=c的的右右值賦給值賦給a a,因此,因此a=5,a=5,最終最終a,b,ca,b,c的值的值均為均為5 5 錯(cuò)誤錯(cuò)誤!a=b!a=b是表達(dá)式是表達(dá)式, ,不可以作為左值使用不可以作為左值使用! !將復(fù)合賦值運(yùn)算符轉(zhuǎn)換為等效的普通賦值運(yùn)算符按以下將復(fù)合賦值運(yùn)算符轉(zhuǎn)換為等效的普通賦值運(yùn)算符按以下3 3步:步:( (1) 1)將原復(fù)合賦值運(yùn)算符將原復(fù)合賦值運(yùn)算符右邊右邊的表達(dá)式的表達(dá)式加圓括號(hào)加圓括號(hào)作為

32、作為1 1個(gè)個(gè)整體整體;( (2)2)將原復(fù)合賦值運(yùn)算符將原復(fù)合賦值運(yùn)算符左邊左邊的的變量名連同那個(gè)算術(shù)運(yùn)算符或變量名連同那個(gè)算術(shù)運(yùn)算符或位運(yùn)算符位運(yùn)算符一起一起移到移到賦值賦值號(hào)的右邊號(hào)的右邊,作為,作為賦值賦值號(hào)右邊的號(hào)右邊的第一第一部分部分置于原復(fù)合賦值運(yùn)算符右邊整體之前;置于原復(fù)合賦值運(yùn)算符右邊整體之前;( (3)3)將原復(fù)合賦值運(yùn)算符將原復(fù)合賦值運(yùn)算符左邊的變量名留下左邊的變量名留下,直接跟賦值號(hào)直接跟賦值號(hào),去掉原來(lái)的算術(shù)運(yùn)算符或位運(yùn)算符。去掉原來(lái)的算術(shù)運(yùn)算符或位運(yùn)算符。例:例:a a* *=b+5 =a=a=b+5 =a=a* *( (b+5b+5) )n程序程序3.6 3.6

33、賦值及復(fù)合賦值示例賦值及復(fù)合賦值示例 n#includenint main( )n n int a,b,c;n a=b=c=7;/相當(dāng)于相當(dāng)于c=7;b=c;a=bn c+=a+;/相當(dāng)于相當(dāng)于c=c+a; a+;n printf(a=%d,c=%dn,a,c);n c%=+a;/相當(dāng)于相當(dāng)于+a; c=c%a;n printf(a=%d,c=%dn,a,c);n c*=a-;/相當(dāng)于相當(dāng)于c=c*a; a-;n printf(a=%d,c=%dn,a,c);n return 0;na=8,c=14a=9,c=5a=8,c=45動(dòng)動(dòng)態(tài)態(tài)演示演示過(guò)過(guò)程程n逗號(hào)逗號(hào)不僅是不僅是C C語(yǔ)言源程序中的

34、一種語(yǔ)言源程序中的一種分隔符,分隔符,還是一種還是一種運(yùn)算符運(yùn)算符。n逗號(hào)表達(dá)式的形式:逗號(hào)表達(dá)式的形式:表達(dá)式表達(dá)式1 1,表達(dá)式,表達(dá)式2 2,,表達(dá)式表達(dá)式n nn運(yùn)算對(duì)象運(yùn)算對(duì)象:可以是任何類型的:可以是任何類型的表達(dá)式表達(dá)式n計(jì)算方法及運(yùn)算結(jié)果:計(jì)算方法及運(yùn)算結(jié)果:按按從左到右從左到右的順序依次計(jì)算各表達(dá)式的的順序依次計(jì)算各表達(dá)式的值,值,最后一個(gè)表達(dá)式最后一個(gè)表達(dá)式n n的結(jié)果的結(jié)果就是整個(gè)逗號(hào)表達(dá)式的結(jié)果就是整個(gè)逗號(hào)表達(dá)式的結(jié)果. .n優(yōu)先級(jí)優(yōu)先級(jí):1515級(jí),優(yōu)先級(jí)最低,通常級(jí),優(yōu)先級(jí)最低,通常通過(guò)加括號(hào)通過(guò)加括號(hào)提升其優(yōu)先級(jí)提升其優(yōu)先級(jí)n結(jié)合方向結(jié)合方向:從左至右從左至右 n

35、例例: :設(shè)所有變量均為設(shè)所有變量均為intint型,計(jì)算型,計(jì)算 x=a=3,6x=a=3,6* *a a 和和 x=(a=3,6x=(a=3,6* *a)a) 這是一個(gè)這是一個(gè)逗號(hào)逗號(hào)表達(dá)式,先計(jì)算賦值表達(dá)式表達(dá)式,先計(jì)算賦值表達(dá)式x=a=3x=a=3,該表達(dá)式的結(jié)果為,該表達(dá)式的結(jié)果為x x,變量變量x x和和a a的的值均為值均為3 3,再計(jì)算第二個(gè)表達(dá)式,再計(jì)算第二個(gè)表達(dá)式6 6* *a a結(jié)果為結(jié)果為1818,因此逗號(hào)表達(dá)式最后結(jié)果為,因此逗號(hào)表達(dá)式最后結(jié)果為1818 這是一個(gè)這是一個(gè)賦值賦值表達(dá)式,先計(jì)算圓括號(hào)內(nèi)逗號(hào)表表達(dá)式,先計(jì)算圓括號(hào)內(nèi)逗號(hào)表達(dá)達(dá)a=3,6a=3,6* *a

36、a ,該表達(dá)式的結(jié)果為,該表達(dá)式的結(jié)果為1818,再將該,再將該結(jié)果賦值給變量結(jié)果賦值給變量x x,因此賦值表達(dá)式最后結(jié),因此賦值表達(dá)式最后結(jié)果為果為1818,變量,變量a a的值為的值為3 3,x x的值為的值為1818 C C語(yǔ)言中的括號(hào)也是運(yùn)算符,處于第一優(yōu)先語(yǔ)言中的括號(hào)也是運(yùn)算符,處于第一優(yōu)先級(jí),用于提升其他運(yùn)算符的優(yōu)先級(jí),及級(jí),用于提升其他運(yùn)算符的優(yōu)先級(jí),及作為函數(shù)參數(shù)表的起止標(biāo)記作為函數(shù)參數(shù)表的起止標(biāo)記n不同類型不同類型進(jìn)行混合運(yùn)算需要先轉(zhuǎn)換為進(jìn)行混合運(yùn)算需要先轉(zhuǎn)換為同一種類型同一種類型再計(jì)算,這個(gè)類再計(jì)算,這個(gè)類型稱為型稱為目標(biāo)類型目標(biāo)類型。C C語(yǔ)言提供了語(yǔ)言提供了3 3種種方

37、式的方式的類型轉(zhuǎn)換類型轉(zhuǎn)換。n(1)(1)不同類型數(shù)據(jù)混合運(yùn)算時(shí),不同類型數(shù)據(jù)混合運(yùn)算時(shí),由編譯器自動(dòng)完成由編譯器自動(dòng)完成隱式類型轉(zhuǎn)換隱式類型轉(zhuǎn)換 float轉(zhuǎn)為轉(zhuǎn)為double 短存儲(chǔ)型轉(zhuǎn)為長(zhǎng)存儲(chǔ)型短存儲(chǔ)型轉(zhuǎn)為長(zhǎng)存儲(chǔ)型 有符號(hào)數(shù)據(jù)轉(zhuǎn)為無(wú)符號(hào)數(shù)據(jù)有符號(hào)數(shù)據(jù)轉(zhuǎn)為無(wú)符號(hào)數(shù)據(jù) 整型轉(zhuǎn)為浮點(diǎn)型整型轉(zhuǎn)為浮點(diǎn)型 n(2)(2)強(qiáng)制性數(shù)據(jù)類型轉(zhuǎn)換強(qiáng)制性數(shù)據(jù)類型轉(zhuǎn)換:根據(jù)用戶需要用語(yǔ)句進(jìn)行轉(zhuǎn)換,形式:根據(jù)用戶需要用語(yǔ)句進(jìn)行轉(zhuǎn)換,形式 (目標(biāo)類型名目標(biāo)類型名)待轉(zhuǎn)換表達(dá)式)待轉(zhuǎn)換表達(dá)式 n例例: : int a=(int)3.14; int a=(int)3.14; /a=3/a=3 n (float) (float)a a/4 = 3.0/4/4 = 3.0/4結(jié)果為結(jié)果為0.750.75n (float)( (float)(a/4a/4) = 3/4) = 3/4結(jié)果為結(jié)果為0,0,然后然后float(0)float(0),結(jié)果,結(jié)果0.00.0n 變量變量a a的類型仍為的類型仍為intint型。型。強(qiáng)制類型轉(zhuǎn)換不

溫馨提示

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

評(píng)論

0/150

提交評(píng)論