![理解運算符的優(yōu)先級_第1頁](http://file4.renrendoc.com/view3/M03/28/0A/wKhkFmZIc9eALz5EAAGqMWB_btw175.jpg)
![理解運算符的優(yōu)先級_第2頁](http://file4.renrendoc.com/view3/M03/28/0A/wKhkFmZIc9eALz5EAAGqMWB_btw1752.jpg)
![理解運算符的優(yōu)先級_第3頁](http://file4.renrendoc.com/view3/M03/28/0A/wKhkFmZIc9eALz5EAAGqMWB_btw1753.jpg)
![理解運算符的優(yōu)先級_第4頁](http://file4.renrendoc.com/view3/M03/28/0A/wKhkFmZIc9eALz5EAAGqMWB_btw1754.jpg)
![理解運算符的優(yōu)先級_第5頁](http://file4.renrendoc.com/view3/M03/28/0A/wKhkFmZIc9eALz5EAAGqMWB_btw1755.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章運算符與表達(dá)式3.1運算符概述3.2算術(shù)運算符與算術(shù)表達(dá)式
3.3賦值運算符與賦值表達(dá)式3.4關(guān)系運算與邏輯運算
3.5逗號運算符與逗號表達(dá)式3.6位運算符3.7指針變量的運算3.8表達(dá)式中的類型轉(zhuǎn)換3.1運算符概述3.1.1C語言運算符分類
C語言中運算符和表達(dá)式數(shù)量之多,在高級語言中是少見的,正是豐富的運算符和表達(dá)式使C語言功能十分完善。這也是C語言的主要特點之一。運算符的種類
C語言的運算符共有10類見教材Pg.47表3-1表3-1C語言的運算符學(xué)習(xí)運算符應(yīng)注意的幾個問題
(1)運算符的功能;(2)與運算量的關(guān)系
a.求運算量的個數(shù)
單目運算++,--,&,-雙目運算+,-,*,%三目運算?:(3)運算符的優(yōu)先級別(4)運算符的結(jié)合性(也稱結(jié)合方向)(5)運算結(jié)果的類型b.求運算量的類型3.1運算符概述2+3*4-61/21.0/2
C語言的運算符不僅具有不同的優(yōu)先級(共分為15級。1級最高,15級最低),而且還有一個特點,就是它的結(jié)合性。結(jié)合性指優(yōu)先級相同時,運算的左右順序。
因此,在表達(dá)式中,各運算量參與運算的先后順序不僅要遵守運算符優(yōu)先級的規(guī)定,還要受運算符結(jié)合性的制約,以便確定是自左向右進(jìn)行運算還是自右向左進(jìn)行運算。例:a*b/c左右
++,--,&右左3.1.2優(yōu)先級與結(jié)合性3.1運算符概述3.2.1
算術(shù)運算符3.2算術(shù)運算符與算術(shù)表達(dá)式設(shè)i=5說明:
1)當(dāng)“/”被用于整數(shù)或字符時,結(jié)果取整。例如,在整數(shù)除法中,5/2結(jié)果為2,1/2的結(jié)果為0。
2)取負(fù)運算的實際效果等于用-1乘單個操作數(shù),即任何數(shù)值前放置減號將改變其符號。
3)求余(或求模運算符)“%”,取整數(shù)除法的余數(shù),其結(jié)果等于兩數(shù)相除后的余數(shù)。要求參與運算的數(shù)據(jù)必須是整型數(shù)據(jù),(“%”不能用于float和double類型)余數(shù)的符號始終與分子的符號一致。例如,9%4=;-9%4=;9%-4=;-9%-4=。3.2算術(shù)運算符與算術(shù)表達(dá)式1-1-11++,--運算符為單目運算,要求運算對象只能是變量結(jié)合方向:為由右至左。優(yōu)先級:高于雙目運算可有以下幾種形式:
++i變量i自增1后再參與其它運算。
i++
變量i參與運算后,i的值再自增1。
--i變量i自減1后再參與其它運算。
i--變量i參與運算后,i的值再自減1。4)自增,自減運算符自增運算符:++其功能是使變量的值自增1。自減運算符:--其功能是使變量值自減1。3.2算術(shù)運算符與算術(shù)表達(dá)式10++++(i+j)×例3-2:main(){intx,y;x=10;y=++x;printf(“%d,%d”,x,y);}程序運行后,輸出結(jié)是:如果將程序的第2行改為:x=10;y=x++
;結(jié)果如何?因此,關(guān)鍵在于區(qū)別變量是先參與運算,還是先使用變量自增(自減)
13.2算術(shù)運算符與算術(shù)表達(dá)式11,11例#include<stdio.h>voidmain(){inta1,a2,a3,a4,b1,b2,b3,b4;a1=a2=a3=a4=10;b1=(a1++)+(a1++);b2=(++a2)+(++a2);b3=(a3--)+(a3--);b4=(--a4)+(--a4);printf("a1=%d,a2=%d,b1=%d,b2=%d\n",a1,a2,b1,b2);printf("a3=%d,a4=%d,b3=%d,b4=%d\n",a3,a4,b3,b4);}程序運行后,輸出結(jié)是:3.2算術(shù)運算符與算術(shù)表達(dá)式a1=12,a2=12,b1=20,b2=24a3=8,a4=8,b3=20,b4=163.2.2算術(shù)表達(dá)式定義:由算術(shù)運算符、括弧、內(nèi)部函數(shù)及數(shù)據(jù)組成的式子例如,下面數(shù)學(xué)表達(dá)式對應(yīng)的C語言表達(dá)式。(b-sqrt(b*b-4*a*c))/(2*a)(a+b)/(a-b)(2*3.14159*r+exp(-5))*log(x)3.2算術(shù)運算符與算術(shù)表達(dá)式表達(dá)式的書寫原則:(1)表達(dá)式中的所有運算符和操作數(shù)必須并排書寫。不能出現(xiàn)上下標(biāo)(如x2,x2等)和數(shù)學(xué)中的分?jǐn)?shù)線。(2)在C表達(dá)式中不能省略乘號(如2ab、xy等)。(3)要注意各種運算符的優(yōu)先級別,為保持運算順序,在寫C表達(dá)式時需要適當(dāng)添加括號()。(4)若要用到庫函數(shù),必須按庫函數(shù)要求書寫,如上面表達(dá)式中的sqrt、exp、log就是庫函數(shù)。庫函數(shù)的書寫格式是:庫函數(shù)名(參數(shù)表)。(5)表達(dá)式中不能出現(xiàn)C語言字符集以外的字符,如β、α、δ、π等希臘字母及≤、≥、÷、≠等數(shù)學(xué)運算符號。
3.2算術(shù)運算符與算術(shù)表達(dá)式3.3賦值運算符和賦值表達(dá)式3.3.1簡單賦值運算符與表達(dá)式
其一般形式為:變量=表達(dá)式
功能:計算表達(dá)式的值再賦予左邊的變量。整個賦值表達(dá)式的值為:左邊變量的值
例如:x=a+b;w=0.5*a*t*t;/*如果寫成:1/2*a*t*t,則結(jié)果為0*/y=i++;x=a+b
w=sin(a)+sin(b)賦值運算符的結(jié)合方向:由右至左因此a=b=c=5可理解為:a=(b=(c=5))
優(yōu)先級:低于條件運算符?:,高于逗號運算符
,在賦值表達(dá)式的未尾加上分號,就構(gòu)成為賦值語句
3.3賦值運算符和賦值表達(dá)式關(guān)于賦值運算的說明:如果賦值運算符兩邊的數(shù)據(jù)類型不相同,系統(tǒng)將自動進(jìn)行類型轉(zhuǎn)換,即把賦值號右邊的類型換成左邊的類型。具體轉(zhuǎn)換規(guī)定如下:1)實型賦予整型,舍去小數(shù)部分。2)整型賦予實型,數(shù)值不變,但將以浮點形式存放,即增加小數(shù)部分(小數(shù)部分的值為0)。3)字符型賦予整型,由于字符型為一個字節(jié),整型為二個字節(jié),故將字符的ASCII碼值放到整型量的低八位中,高八位為0。4)整型賦予字符型,只把低八位賦予字符量。3.3賦值運算符和賦值表達(dá)式
例3-4用程序驗證不同類型變量的賦值的類型轉(zhuǎn)換。voidmain(){inta,b,c=322;floatx,y=3.14;charch1='a',ch2;a=y;x=c;b=ch1;ch2=c;printf(“a=%d,x=%f,b=%d,ch2=%c",a,x,b,ch2);}程序運行結(jié)果是:
a=3,x=322.000000,b=97,ch2=B3.3賦值運算符和賦值表達(dá)式c=322的二進(jìn)制表示為:000000010100001066
在賦值符“=”之前加上其它二目運算符可構(gòu)成復(fù)合賦值符。如:+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=構(gòu)成復(fù)合賦值表達(dá)式的一般形式為:
變量雙目運算符=表達(dá)式它等效于:
變量=變量運算符表達(dá)式
優(yōu)先級別:僅高于逗號(,)運算符例如:
a+=5
等價于a=a+5
x*=y+7
等價于x=x*(y+7)
r%=p
等價于r=r%p
復(fù)合賦值符的優(yōu)先級和結(jié)合方向與賦值運算符(=)相同3.3.2復(fù)合賦值運算符與表達(dá)式3.3賦值運算符和賦值表達(dá)式#include<stdio.h>voidmain(){inta=10,b=10;printf("%d\t",a+=a-=a*a);printf("%d\n",b+=b-=b*=b);}輸出:-1800
3.4.1關(guān)系運算符與關(guān)系表達(dá)式關(guān)系運算符及優(yōu)先級別比較兩個量的運算符稱為關(guān)系運算符。在C語言中有以下關(guān)系運算符。(見教材P53.表3-3)
<,<=,>,>=,==
,!=
關(guān)系運算符的優(yōu)先級:
(1)
>、>=、<、<=優(yōu)先級相等,==、!=優(yōu)先級相等,前者高于后者。
(2)算術(shù)運算符>
關(guān)系運算符>
賦值運算符
3.4關(guān)系運算與邏輯運算關(guān)系表達(dá)式
關(guān)系表達(dá)式的一般形式為:
表達(dá)式關(guān)系運算符表達(dá)式
關(guān)系表達(dá)式的值是:關(guān)系成立為“真”,不成立則為“假”
C語言中用“1”
表示“真”
“0”
表示“假”例如:a+b>c-dx>3/2
‘a(chǎn)’+1<c-i-5*j==k+1都是合法的關(guān)系表達(dá)式。3.4關(guān)系運算與邏輯運算由于表達(dá)式中也可以包含關(guān)系表達(dá)式。因此出現(xiàn)嵌套的情況,例如:當(dāng)a=5,b=4,c=3時
a<(b>c) a!=(c==b)
又如:
(a=3)>(b=5)由于3>5不成立,故其值為0。又如:當(dāng)a=5,b=4時
a+=3<b------------假(0)------------真(1)------------假(0)------------63.4關(guān)系運算與邏輯運算
數(shù)學(xué)中:a在2到100之間時,C語言能不能用2<a<100表示?3.4.2邏輯運算符與邏輯表達(dá)式
1、邏輯運算符C語言中提供了三種邏輯運算符
!
非運算&&
與運算||
或運算運算符&&和運算符||均為雙目運算符,具有左結(jié)合性。非運算符!為單目運算符,具有右結(jié)合性
(1)邏輯運算符優(yōu)先級表示如下:
!>&&>||
而且:&&,||低于關(guān)系運算符!高于算術(shù)運算符
!(非)(高)算術(shù)運算符關(guān)系運算符&&和||賦值運算符(低)3.4關(guān)系運算與邏輯運算
2、邏輯表達(dá)式邏輯表達(dá)式的一般形式為:表達(dá)式
邏輯運算符
表達(dá)式
按照運算符的優(yōu)先順序可以得出:
a>b&&c>d(a>b)&&(c>d)
!b==c||d<a((!b)==c)||(d<a)a+b>c&&x+y<b((a+b)>c)&&((x+y)<b)
邏輯表達(dá)式的值:邏輯表達(dá)式的值也為“真”和“假”兩種,用“1”和“0”來表示。3.4關(guān)系運算與邏輯運算
例判斷某一年份year是否是閏年,如何用C語言描述。3.4關(guān)系運算與邏輯運算(year%4==0&&year%100!=0)||(year%400==0)解析:year是閏年,需滿足以下條件之一:該年可以被4整除,但不能被100整除。該年可以被400整除。則可以用邏輯表達(dá)式表示為:
表達(dá)式a&&b&&c
的求解過程
只有a為真時,才判別b的值;只有a和b均為真時,才判別c的值。只要a為假,就不再判別b和c的值,直接求得表達(dá)式的值為假。3、關(guān)于邏輯運算的說明圖3-1表達(dá)式a&&b&&c的求解過程
3.4關(guān)系運算與邏輯運算
表達(dá)式
a||b||c
的求解過程只要a為真,就不再判別b和c的值,直接求得表達(dá)式的值為真。只有a為假時,才判別b的值;只有a和b均為假時,才判別c的值3.4關(guān)系運算與邏輯運算圖3-2表達(dá)式a||b||c的求解過程
設(shè)a,b,c,d均為0,執(zhí)行(m=a==b)&&(n=c!=d)后m,n的值分別是m=1,n=03.4關(guān)系運算與邏輯運算當(dāng)c的值為0時,在下列選項中能將c的值賦給變量a,b的是DA.c=a=bB.(a=c)&&(b=c)C.a=c=bD.(a=c)||(b=c)
例3-5
分析下面程序的運行結(jié)果。Voidmain(){intx=5,y=9,k=1,a;a=x++||y++&&k++;printf("a=%d,x=%d,y=%d,k=%d\n",a,x,y,k);}3.4關(guān)系運算與邏輯運算程序運行結(jié)果如下:3.4關(guān)系運算與邏輯運算分析:語句“a=x++||y++&&k++;”的執(zhí)行過程是先求“=”右邊的值,即計算表達(dá)式“x++||y++&&k++”的值,系統(tǒng)從左到右進(jìn)行掃描,x=5,x++是先取x的值(即5,運算后x的值增加1)進(jìn)行“||”運行,因為不管其右邊的值是什么,其結(jié)果都是成立的,即整個表達(dá)式的值為1,C系統(tǒng)就不再計算“||”右邊表達(dá)式“y++&&k++”,所以y的值,k的值不變。
讀者思考:
如果x的初值為0,程序的運行結(jié)果如何?
3.5逗號運算符和逗號表達(dá)式
在C語言中逗號“,”也是一種運算符,稱為逗號運算符。其功能是把兩個表達(dá)式連接起來組成一個表達(dá)式,稱為逗號表達(dá)式。其一般形式為:
表達(dá)式1,表達(dá)式2,…,表達(dá)式n
其求值過程是分別求表達(dá)式1、表達(dá)式2…表達(dá)式n的值,并以最后一個表達(dá)式n的值作為整個逗號表達(dá)式的值。
求解逗號表達(dá)式“x=a=3,6*a”后,表達(dá)式的值、x、a的值以此是表達(dá)式的值=18x=3a=3
例題
voidmain(){inta=2,b=4,c=6,x,y;y=((x=a+b++),(b+c),x+c);printf("y=%d,x=%d",y,x);}結(jié)果是:?有關(guān)逗號表達(dá)式的說明:
1)逗號運算符優(yōu)先級最低。
2)程序中使用逗號表達(dá)式,通常是要分別求逗號表達(dá)式內(nèi)各表達(dá)式的值,并不一定要求整個逗號表達(dá)式的值。
3)并不是在所有出現(xiàn)逗號的地方都組成逗號表達(dá)式,如在變量聲明中或函數(shù)參數(shù)表中的逗號只是用作各變量之間的間隔符。3.5逗號運算符和逗號表達(dá)式y(tǒng)=12,x=6
前面介紹的各種運算都是以字節(jié)作為最基本位進(jìn)行的。但在很多系統(tǒng)程序中常要求在位(bit)一級進(jìn)行運算或處理。
C語言提供了位運算的功能,這使得C語言也能像匯編語言一樣用來編寫系統(tǒng)程序。3.6位運算符
所謂位運算是指,按二進(jìn)制位進(jìn)行的運算
C語言提供了6種位運算符,它們的運算規(guī)則如教材P57表3-5所示
表3-6位運算符的運算規(guī)則
1.按位與──&
(1)格式:x&y
(2)規(guī)則:對應(yīng)位均為1時才為1,否則為0:9&5=1。例如,9&5可寫算式如下:
00001001(9的二進(jìn)制補(bǔ)碼)&00000101(5的二進(jìn)制補(bǔ)碼)
00000001(1的二進(jìn)制補(bǔ)碼) 主要用途:
1)清零。方法是與一個各位都為零的數(shù)值按位與,結(jié)果為零。
2)取一個數(shù)x中某些指定位。方法是找一個數(shù),此數(shù)的各位是這樣取值的:對應(yīng)x數(shù)要取各位,該數(shù)對應(yīng)位為1,其余位為零。
3.6位運算符
2.按位或──|
(1)格式:x|y
(2)規(guī)則:對應(yīng)位均為0時才為0,否則為1:3|9=11。例如,9|5可寫算式如下:
00001001|0000010100001101(十進(jìn)制為13)即9|5=13按位或的特殊用途:常用來對一個數(shù)據(jù)的某些位置13.6位運算符
3.按位異或──^(1)格式:x^y(2)規(guī)則:對應(yīng)位相同時為0,不同時為1:9^5=12(3)主要用途:使1個數(shù)的某(些)位翻轉(zhuǎn)(即原來為1的位變?yōu)?,為0的變?yōu)?),其余各位不變4.按位取反──~(1)格式:~x(2)規(guī)則:各位翻轉(zhuǎn),即原來為1的位變成0,原來為0的位變成1:在IBM-PC機(jī)中,~0=0xffff,~9=0xfff6(3)主要用途:間接地構(gòu)造一個數(shù),以增強(qiáng)程序的可移植性3.6位運算符
例:若a整型變量,表達(dá)式“~(a^~a)”等于表達(dá)式~3(2&3^4)的值為04
5.按位左移──<<(1)格式:x<<位數(shù)(2)規(guī)則:使操作數(shù)的各位左移,低位補(bǔ)0,高位溢出:例P3026.按位右移──>>(1)格式:x>>位數(shù)(2)規(guī)則:使操作數(shù)的各位右移,移出的低位舍棄;高位:1)對無符號數(shù)和有符號中的正數(shù),補(bǔ)0;2)有符號數(shù)中的負(fù)數(shù),取決于所使用的系統(tǒng):補(bǔ)0的稱為“邏輯右移”,補(bǔ)1的稱為“算術(shù)右移”。例如,20>>2=5。說明:(1)x、y和“位數(shù)”等操作數(shù),都只能是整型或字符型數(shù)據(jù)。除按位取反為單目運算符外,其余均為雙目運算符。(2)參與運算時,操作數(shù)x和y,都必須首先轉(zhuǎn)換成二進(jìn)制形式,然后再執(zhí)行相應(yīng)的按位運算。例如,5<<2=20:0101→10100,20>>2=5:10100→00101。3.6位運算符
7.位運算符與賦值運算符組成復(fù)合運算符除按位取反運算符(~)外,其他位運算符都可與賦值運算符組成復(fù)合位賦值運算符。它們是:&=,|=,>>=,<<=,∧=。例如,a&=b等價于a=a&b,a|=b等價于a=a|b,a>>=b等價于a=a>>b。
voidmain(){unsigneda,b,x,y;printf("Enteranumber=?\n");scanf("%o",&a);/*輸入1個八進(jìn)制整數(shù)給a*/b=a>>4; /*將a右移4位
*/x=~(~0<<4);/*間接構(gòu)造1個低4位為1、其余各位為0的整數(shù)*/y=b&x;printf("%o\n%o\n",a,y); /*按八進(jìn)制數(shù)輸出a和y*/}3.6位運算符
例3-7編寫程序取一個整數(shù)a從右端開始的第4~7位(最右邊是第0位)。例如:0000000101000010,取右端第4~7位為:0100.3.7指針變量的運算1.取地址運算符&
其格式是:&變量名例如:p=&a;&是單目運算符,其結(jié)合性為自右至左。2.取內(nèi)容運算符*其格式是:*指針變量名例如:*p=5;/*給指針變量p指向的變量賦值5*/printf("%d",*p);/*打印輸出指針變量指向的變量的值*/*是單目運算符,其結(jié)合性為自右至左。注意:指針運算符“*”和指針變量說明中的指針說明符“*”不同。例如:inta=3,x,*p;/*a,x為整型,*p的基準(zhǔn)類型為整型*/…p=&a;/*指針變量p取得了整型變量a的地址*/x=*p;/*將指針變量p所指向的變量a的值賦給變量x*/3.7.1指針運算符2.&*p與*&a(1)&*p等價于&(*p)和&a,即變量a的地址,也就是p。注意不要寫成:&*a×(2)*&a等價于*(&a)和*p,即變量a。由此可見,&和*是一對互逆的運算符。1.p++與++p假設(shè)變量a的地址為2000,p=&a;則:(1)p++表達(dá)式的值為2000,而p的值變?yōu)?002,因為p指向一塊大小為2字節(jié)的存儲空間,p+1將指向相鄰的下一塊大小為2字節(jié)的存儲空間。(2)++p表達(dá)式的值為2002,p的值也變?yōu)?002。同理可知,p--表達(dá)式的值為2000,而p的值變?yōu)?998;--p表達(dá)式的值為1998,p的值也變?yōu)?
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 產(chǎn)品試制合同范例
- 供貨承攬合同范例
- 農(nóng)機(jī)租賃服務(wù)合同范例
- 下游付款合同范本
- 供電電纜勞務(wù)合同范例
- 義烏廠房裝修設(shè)計合同范例
- 個人投資項目合同范例
- 公司辦公室租房合同范例
- 中層勞動合同范例
- 主播誠信合同范例
- 屋面細(xì)石混凝土保護(hù)層施工方案及方法
- 2024年1月山西省高三年級適應(yīng)性調(diào)研測試(一模)理科綜合試卷(含答案)
- 110kv各類型變壓器的計算單
- 雙減政策之下老師如何打造高效課堂
- 5A+Chapter+1+Changes+at+home+課件(新思維小學(xué)英語)
- 安徽省2023年中考數(shù)學(xué)試卷(附答案)
- 護(hù)工(陪護(hù))培訓(xùn)教材(完整版)資料
- 機(jī)械加工生產(chǎn)計劃排程表
- 女性生殖系統(tǒng)解剖與生理 生殖系統(tǒng)的血管淋巴和神經(jīng)
- 易制毒化學(xué)品安全管理制度匯編
- GB/T 35506-2017三氟乙酸乙酯(ETFA)
評論
0/150
提交評論