表達(dá)式與操作符_第1頁
表達(dá)式與操作符_第2頁
表達(dá)式與操作符_第3頁
表達(dá)式與操作符_第4頁
表達(dá)式與操作符_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費閱讀

VIP免費下載

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

文檔簡介

第5章表達(dá)式與操作符表達(dá)式和語句的概念及其關(guān)系;各種操作符語句的使用;操作符之間的優(yōu)先級和結(jié)合性;了解詞法分析中的分析法;使用小括號改變操作符的執(zhí)行順序。5.1表達(dá)式和語句在C語言中,語句是程序功能的基本執(zhí)行單位,多個語句結(jié)合在一起可以完成一些特定的功能;而一個語句又由若干個表達(dá)式組成;此外,語句和表達(dá)式可以通過一定的手段來相互轉(zhuǎn)換。本節(jié)將討論表達(dá)式和語句的概念和使用。5.1.1表達(dá)式表達(dá)式是C語句的主體。在C語言中,表達(dá)式由操作符和操作數(shù)組成。操作符可以是+、-、*、/或%一類的運算操作符,也可以是>、<或==之類的關(guān)系操作符,還可以是其他一些操作符。操作數(shù)是操作符的操作對象,可以是常量或變量。最簡單的表達(dá)式可以只含有一個操作數(shù),例如:73.1415926“hello,world”variable5.1.1表達(dá)式根據(jù)表達(dá)式含有的操作符的個數(shù),可以把表達(dá)式分為簡單表達(dá)式和復(fù)雜表達(dá)式:簡單表達(dá)式是只含有一個操作符的表達(dá)式;復(fù)雜表達(dá)式含有兩個或兩個以上操作符。下面分析兩種表達(dá)式的含義和它們的執(zhí)行過程。1.簡單表達(dá)式簡單表達(dá)式由于只含有一個操作符,運行方式比較簡單。下面列舉了幾個簡單表達(dá)式,其中接觸到的操作符在后面幾節(jié)將詳細(xì)講解。c=2 /*表達(dá)式1*/4+25 /*表達(dá)式2*/ptr==NULL /*表達(dá)式3*/key>max /*表達(dá)式4*/fun(b) /*表達(dá)式5*/5.1.1表達(dá)式2.復(fù)雜表達(dá)式在復(fù)雜表達(dá)式中,每一個操作符和它的操作數(shù)組成的表達(dá)式為復(fù)雜表達(dá)式的子表達(dá)式。例如:b=d+e;下列5個表達(dá)式都是復(fù)雜表達(dá)式,它們依次是上面的5個簡單表達(dá)式的復(fù)雜化版本。c=b+2 /*表達(dá)式1*/4+25*3 /*表達(dá)式2*/*ptr==length /*表達(dá)式3*/key+incre>max /*表達(dá)式4*/fun(7+5-3) /*表達(dá)式5*/5.1.2語句語句是計算機運行C程序的基本執(zhí)行單元,一個程序是由一系列的語句組成。在C語言中,一條完整的語句由表達(dá)式和分號的。例如:/*表達(dá)式;*/var=2;其中的表達(dá)式部分可以是最簡單的表達(dá)式,也可以是很冗長的復(fù)雜表達(dá)式,還可以為空。最簡單的語句就是一條空語句,即只有一個分號,如下所示;5.1.2語句這個語句雖然什么都沒有做,但是有時候在邏輯上卻需要這樣的空語句。例如,要求在一個數(shù)組里得到某個值的下標(biāo),程序如下所示:for(inti=0;i<max&&array[i]!=target;++i); /*功能已完整,無需執(zhí)行體*/上面是一個完整的for語句結(jié)構(gòu)。在功能上,只需要執(zhí)行循環(huán)判斷部分(i<max&&array[i]!=target;)就可以完成查找功能;但是,在程序結(jié)構(gòu)上,for結(jié)構(gòu)還需要一個循環(huán)體,因此這里需要一條空語句。關(guān)于for語句,在第5章將詳細(xì)討論。5.1.3復(fù)合語句復(fù)合語句,也可以稱為程序塊,是包含在花括號({})內(nèi)的多個語句的集合。標(biāo)準(zhǔn)形式如下所示:{語句1;語句2;語句3;……}5.1.3復(fù)合語句C語言的執(zhí)行都是逐條語句依次執(zhí)行的。但是為了實現(xiàn)一些復(fù)雜的功能,很多程序常常需要把幾條語句作為一個功能單元來執(zhí)行,這時就需要使用復(fù)合語句把多條語句綁定為一個整體。1.組成特殊語句結(jié)構(gòu)復(fù)合語句主要用在C語言的特殊語句中,比如if語句、for語句和while語句等,構(gòu)成這些語句的執(zhí)行體,以實現(xiàn)一些復(fù)雜的功能。例如,要執(zhí)行一個功能:當(dāng)a大于b時,互換變量a和變量b的值;當(dāng)a不大于b時,什么都不做。程序如下所示:01 /*當(dāng)a大于b時,互換變量a和變量b的值*/02 if(a>b){ /*if語句*/03 c=a;04 a=b;05 b=c;06 }5.1.3復(fù)合語句如果不使用花括號把三條操作語句聯(lián)合為復(fù)合語句,將無法實現(xiàn)正常的功能,例如:01 if(a>b)02 c=a;03 a=b;04 b=c;對齊代碼后,等效于:01 if(a>b)02 c=a;03 a=b;04 b=c;5.1.3復(fù)合語句2.提高程序可讀性除了用在特殊語句內(nèi),復(fù)合還可以將一些完成單一功能的語句放在一個花括號中,以提高程序可讀性。3.嵌套使用復(fù)合語句還可以嵌套使用。5.1.3C操作符操作符是C語言的重要組成,也是本章要討論的重點。C語言提供了豐富的操作符,以完成各種各樣的功能。C語言共有45個操作符,簡單地分類展示如下:后綴操作符(4個):()[].->算術(shù)操作符(7個):+-*/%++--符號操作符(2個):+-邏輯操作符(3個):!&&||5.1.3C操作符關(guān)系操作符(6個):>>=<<===!=位操作符(6個):~>><<&^|條件操作符(1個):?:賦值操作符(11個):=*=/=%=+=-=<<=>>=&=^=|=逗號操作符(1個):,轉(zhuǎn)型操作符(1個):(數(shù)據(jù)類型名)即(int)、(char)等地址操作符(2個):*&求字節(jié)操作符(1個):sizeof()5.1.3C操作符下面來討論如何區(qū)分既可作為運算操作符,也可以作為地址操作符的*。01 pro=a*b;02 b=*ptr;03 pro=a**ptr; /*兩個*中間以及兩邊的空格可以為隨意多個,也可以沒有*/5.2賦值操作符與賦值表達(dá)式賦值操作符是C語言中最常用的操作符之一,其功能是為變量賦值。由賦值操作符所組成的表達(dá)式稱為賦值表達(dá)式。本節(jié)將先討論賦值操作符和賦值表達(dá)式的使用,在介紹左值和右值的概念,最后討論賦值表達(dá)式中常見的類型轉(zhuǎn)換的問題。5.2.1賦值操作符賦值操作符是一個二元操作符,其組成的賦值表達(dá)式的標(biāo)準(zhǔn)形式由變量、賦值操作符和一個表達(dá)式組成,如下所示:變量=表達(dá)式;賦值表達(dá)式的作用,就是把等號右邊的表達(dá)式的值賦值給等號左邊的變量。其中,賦值操作符左邊的變量也稱為左值,右邊的表達(dá)式稱為右值。賦值表達(dá)式的值即為語句執(zhí)行后左值的值。5.2.2賦值操作符的結(jié)合性

當(dāng)多個賦值操作符存在于同一條語句中時,按照C標(biāo)準(zhǔn)的規(guī)定,將會按照從右到左的結(jié)合方式先執(zhí)行最右邊的賦值操作符,再依次向左執(zhí)行其余賦值操作符。例如:a=b=c=表達(dá)式;該語句會先執(zhí)行最右邊的賦值操作符,再執(zhí)行中間的,最后執(zhí)行左邊的,即等效于:a=(b=(c=表達(dá)式)); /*括號操作符的優(yōu)先級是最高的*/5.2.3左值和右值在C語言中,左值和右值是十分重要的概念。并不是所有的值都是可以改變的,可以改變的值被稱為左值。之所以要稱為左值,還因為只有可以改變的值才能放在賦值操作符的左邊,即只有左值可以放在賦值操作符的左邊,也可以說放在賦值操作符左邊的都是左值。左值可以是變量,如下所示:intyear=2008;int型變量year被賦值為2008。左值也可以是部分表達(dá)式,如下:int*month;*month=2;5.2.4賦值表達(dá)式中的類型轉(zhuǎn)換在賦值表達(dá)式中,當(dāng)把一種類型的數(shù)據(jù)賦值給不同類型的變量時,編譯器會隱式地把該數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,轉(zhuǎn)換為該變量的類型后才賦值。例如:intsmall=2008;longlongintlarge;large=small;5.2.5類型轉(zhuǎn)換操作符類型轉(zhuǎn)換操作符是操作符中十分獨特的一個,由一個小括號及包含在小括號里的一個類型名稱組成,如下所示:(int)(longlongint)(float)類型轉(zhuǎn)換操作符也是一個一元操作符,只帶一個操作數(shù),使用時放在操作數(shù)的前面。它的作用是把操作數(shù)的值的數(shù)據(jù)類型改變?yōu)椴僮鞣械臄?shù)據(jù)類型。如下所示為類型轉(zhuǎn)換操作符的標(biāo)準(zhǔn)形式:(數(shù)據(jù)類型名)(表達(dá)式)5.2.5類型轉(zhuǎn)換操作符下面是幾個使用類型轉(zhuǎn)換符的實例:inti=(int)3.11;floatf=(float)7;shortintv=(shortint)28;其中,double型常量3.11會轉(zhuǎn)換為整型(會丟失數(shù)據(jù))后賦值給int型變量i,int型變量7會轉(zhuǎn)換為float型(不會丟失數(shù)據(jù))后賦值給float型變量f,int型數(shù)據(jù)28將轉(zhuǎn)換為shortint型(不會丟失數(shù)據(jù))后賦值給shortint型變量v。當(dāng)表達(dá)式不僅僅是一個變量或一個常量時,需要把表達(dá)式放在小括號內(nèi)。例如:m=(int)(3.7+2.5)這時,程序會對3.7和2.5的和類型轉(zhuǎn)換為int型。如果沒有括號,只是:m=(int)3.7+2.55.3運算操作符與運算表達(dá)式數(shù)值計算離不開運算操作符,都要依靠運算操作符將各種數(shù)值連接在一起來完成特定的數(shù)值計算。由運算操作符組成的表達(dá)式為運算表達(dá)式。本節(jié)將討論各種基本運算操作符和運算表達(dá)式的使用,同時還討論與它們密切相關(guān)的符號操作符,以及運算表達(dá)式中的優(yōu)先級、結(jié)合性和類型轉(zhuǎn)換的問題。5.3.1運算操作符運算操作符共有五個,分別是加法操作符(+)、減法操作符(-)、乘法操作符(*)、除法操作符(/)和求余操作符(%)。它們均為二元操作符,即操作符前后都需要有一個操作數(shù)。5.3.1運算操作符1.加法操作符加法操作符的功能即進(jìn)行加法運算。例如:var=3+4+5+6+7;賦值操作符右側(cè)為一個復(fù)雜的加法表達(dá)式,程序?qū)⑾扔嬎?和4的和,再計算該和與5的和,再計算該和與6的和,再計算該和與7的和,最后將最終的和賦值給var。當(dāng)然,操作數(shù)也可以是變量。例如:printf(“sum=%d”,a+b); /*變量a和b為加法操作符的兩個操作數(shù)*/5.3.1運算操作符2.減法操作符減法操作符的功能即,進(jìn)行減法運算。例如:diff=512–128;賦值操作符右側(cè)即為減法表達(dá)式,將計算512和128的差作為該表達(dá)式的值,最后賦值給變量diff。5.3.1運算操作符3.乘法操作符乘法操作符的功能是將它的操作數(shù)進(jìn)行乘法計算,得到的值作為乘法表達(dá)式的值。例如:area=length*width;賦值操作符右側(cè)即為一個乘法表達(dá)式,將計算變量length和變量width的乘積作為該子表達(dá)式的值,最后將該值賦值給area。5.3.1運算操作符4.除法操作符除法操作符的功能是將它的操作數(shù)進(jìn)行除法運算,將得到的值作為除法表達(dá)式的值。例如:rate=distance/time;賦值操作符右側(cè)為一個除法表達(dá)式,其功能是計算變量distance除以變量time的商,最后將該值賦給變量rate。5.3.1運算操作符5.求余操作符求余操作符的功能是求其左側(cè)的操作數(shù)除以右側(cè)操作數(shù)的余數(shù)。例如:digit=number%10;賦值操作符右側(cè)為一個求余表達(dá)式,其作用為計算變量number除以10的余數(shù),即變量number的個位數(shù),最后將該值賦值給變量digit。5.3.2符號操作符減法操作符(-)和加法操作符(+)不僅可以作為運算操作符,還可以作為符號操作符。1.負(fù)號操作符負(fù)號操作符是一元操作符,其作用是改變操作數(shù)的符號。它的操作數(shù)跟在操作符后面,可以是整型、浮點型或字符型的常量或變量。例如:-25-74.0-‘c’-a5.3.2符號操作符2.正號操作符正號操作符與負(fù)號操作符的使用方法類似,也是一元操作符,其操作數(shù)也放在操作符后面,也可以是整型、浮點型或字符型的常量或變量。但是,正號操作符的用途沒有負(fù)號操作符廣,因為和數(shù)學(xué)意義上的正號意義,在一個數(shù)前面加上正號不會改變該數(shù)的值。例如:+(-25)+25+a5.3.3優(yōu)先級與結(jié)合性操作符的優(yōu)先級是指操作符執(zhí)行的先后順序。當(dāng)多個操作符共同存在于一個復(fù)雜表達(dá)式中時,需要按照一定的先后順序執(zhí)行;優(yōu)先級高的操作符會比優(yōu)先級低的操作符先被執(zhí)行。例如:result=15+7*12–7/4;5.3.3優(yōu)先級與結(jié)合性下表總結(jié)了所有已接觸到的操作符的優(yōu)先級和結(jié)合性。其中優(yōu)先級從上到下依次降低。5.3.4數(shù)值運算中的類型轉(zhuǎn)換

在運算表達(dá)式中,當(dāng)不同類型的數(shù)值之間進(jìn)行運算時,編譯器也會像在賦值表達(dá)式中那樣進(jìn)行隱式的類型轉(zhuǎn)換。例如:area=4*7.5;其中,4為int型,7.5為double型。int型的4將先被轉(zhuǎn)換為double型再與double型的7.5相乘。5.3.4數(shù)值運算中的類型轉(zhuǎn)換

數(shù)值運算中的類型轉(zhuǎn)換遵從以下規(guī)則:char型和short型數(shù)據(jù),不管是unsigned還是signed,在計算中都要先無條件轉(zhuǎn)換為int型,即使是兩個char型或short型數(shù)值相加。float型計算前會無條件轉(zhuǎn)換為double型數(shù)值,以增加精度。其余類型的數(shù)值計算時,都要轉(zhuǎn)換為數(shù)據(jù)類型級別較高的后再計算。5.3.4數(shù)值運算中的類型轉(zhuǎn)換

數(shù)據(jù)類型級別是以能存儲的數(shù)值范圍來定義的,能儲存的數(shù)值范圍越大,數(shù)據(jù)類型級別越高。如下圖所示:5.3.5復(fù)合的賦值操作符賦值操作符與上面介紹的五種基本運算操作符結(jié)合,可以組成復(fù)合的賦值操作符:+=,-=,*=,/=和%=。他們使用形式與賦值操作符相似,都是二元操作符,而且左側(cè)也只能為左值,右側(cè)為右值;但是功能上比賦值操作符復(fù)雜。1.+=該操作符由賦值操作符與加法操作符結(jié)合而成的,其使用形式為:左值+=右值;其作用為,將左值與右值相加的和賦給左值,等效于:左值=左值+右值;5.3.5復(fù)合的賦值操作符2.-=該操作符由賦值操作符與減法操作符結(jié)合而成的,其使用形式為:左值-=右值;其作用為,將左值與右值相減的差賦給左值,等效于:左值=左值-右值;3.*=該操作符由賦值操作符與乘法操作符結(jié)合而成的,其使用形式為:左值*=右值;其作用為,將左值與右值相乘的積賦給左值,等效于:左值=左值*右值5.3.5復(fù)合的賦值操作符4./=該操作符由賦值操作符與除法操作符結(jié)合而成的,其使用形式為:左值/=右值;其作用為,將左值與右值相除的商賦給左值,等效于:左值=左值/右值;5.%=該操作符由賦值操作符與求余操作符結(jié)合而成的,其使用形式為:左值%=右值;其作用為,將左值對右值求余的結(jié)果賦給左值,等效于:左值=左值%右值;5.4自增、自減操作符為了簡化程序書寫,C語言中還定義了兩種操作符:自增操作符(++)和自減操作符(--)。這兩種操作符都是一元操作符,只帶一個操作數(shù);同時,這兩個操作符可以放在它們的操作數(shù)的左邊,也可以放在右邊,兩者的功能是不同的。本節(jié)將介紹自增操作符和自減操作符的語法和使用時需要注意的問題,同時還將討論貪婪法的內(nèi)容。5.4.1自增操作符顧名思義,自增操作符就是使自己的值增加的操作符。準(zhǔn)確地說,自增操作符的作用是將其唯一的操作數(shù)賦值為其自身值加1后的值。由于該操作數(shù)會被賦值,因此必須是左值,即要求其值是可以改變的。自增表達(dá)式的標(biāo)準(zhǔn)形式如下:左值++5.4.2自減操作符自減操作符與自增操作符使用方法完全一樣,也為一元操作符。它可以放在其唯一的操作數(shù)(稱為前自減操作符)的前面,也可以放在操作數(shù)的后面(稱為后自減操作符)。自減操作符的作用是將其操作數(shù)減1后再賦值給本身。自減操作符也有前自減操作符和后自減操作符:前自減操作符是在執(zhí)行所在語句前自減1,而后自減是在執(zhí)行語句后自減1。5.4.3優(yōu)先級與結(jié)合性自增操作符和自減操作符的優(yōu)先級與符號操作符相同。在上面的案例中,已經(jīng)接觸到它們的優(yōu)先級的使用,例如范例5-13中的第8行:y=--x+1;由于,自減操作符的級別最高,所以先執(zhí)行前自減的操作。但是需要注意的是,在第12行中:y=1+x--;5.4.4詞法分析:貪婪法詞法分析是指編譯器把C程序中的字符處理為一個個C語言中的符號的過程。C語言中的操作符有單字符的(例如=、+、-),也有兩個字符的(例如++、--),還有更多字符的(例如類型轉(zhuǎn)換操作符)。由于,C語言允許兩個操作符之間可以沒有空格(例如v=+d,其中=+為兩個操作符),因此某些字符在一起可以組合成多種不同情況的操作符,例如:++bbb;5.4.4詞法分析:貪婪法理論上,++除了可以視為前自增操作符,也可以視為兩個正號操作符,等效于:+(+bbb);例如:+++++++b; /*7個+*/按照貪婪法,分析的結(jié)果等效于:+++++++b;再進(jìn)行語法分析,自增操作符與加法操作符結(jié)合性為從右到左,分析結(jié)果等效于:++(++(++(+b)));5.4.5自增、自減操作符的副作用所謂自增操作符和自減操作符的副作用就是,它們在執(zhí)行它們所在語句之前或之后對操作數(shù)的自增和自減操作。由于這些操作與語句是在不同階段執(zhí)行的,在一些復(fù)雜的情況下,程序員常常因此會犯錯誤。甚至于在不同的編譯器中,這些語句的結(jié)果也是不盡相同的。在編程過程中,應(yīng)當(dāng)盡量消除這些副作用可能導(dǎo)致錯誤的隱患。5.5關(guān)系操作符與關(guān)系表達(dá)式在前面的范例中,已經(jīng)接觸到很多關(guān)系操作符的例子。關(guān)系操作符在C語言中主要用于進(jìn)行數(shù)值比較。由關(guān)系操作符組成的關(guān)系表達(dá)式通常用在程序中的控制選擇語句中。本節(jié)將討論關(guān)系操作符和關(guān)系表達(dá)式的使用,以及關(guān)系操作符的優(yōu)先級和結(jié)合性。5.5.1使用關(guān)系操作符關(guān)系操作符包括小于操作符(<)、大于操作符(>)、小于等于操作符(<=)、大于等于操作符(>=)、等于操作符(==)和不等于操作符(!=)6種。使用關(guān)系操作符的標(biāo)準(zhǔn)方式如下:1.小于操作符(<)表達(dá)式1<表達(dá)式2該表達(dá)式為小于表達(dá)式,當(dāng)表達(dá)式1的值小于表達(dá)式2的值時,為真;否則,為假。2.小于等于操作符(<=)表達(dá)式1<=表達(dá)式2該表達(dá)式為小于等于表達(dá)式,當(dāng)表達(dá)式1的值小于等于表達(dá)式2的值時,為真;否則,為假。5.5.1使用關(guān)系操作符3.大于操作符(>)表達(dá)式1>表達(dá)式2該表達(dá)式為大于表達(dá)式,當(dāng)表達(dá)式1的值大于表達(dá)式2的值時,為真;否則,為假。4.大于等于操作符(>=)表達(dá)式1>=表達(dá)式2該表達(dá)式為大于表達(dá)式,當(dāng)表達(dá)式1的值大于等于表達(dá)式2的值時,為真;否則,為假。5.等于操作符(==)表達(dá)式1==表達(dá)式2該表達(dá)式為等于表達(dá)式,當(dāng)表達(dá)式1的值等于表達(dá)式2的值時,為真;否則,為假。5.5.1使用關(guān)系操作符6.不等于操作符(!=)表達(dá)式1!=表達(dá)式2該表達(dá)式為不等于表達(dá)式,當(dāng)表達(dá)式1的值不等于表達(dá)式2的值時,為真;否則,為假。關(guān)系表達(dá)式的計算是一個比較的過程,如果被比較的兩個值類型不同,必須先進(jìn)行類型轉(zhuǎn)換。例如:4>4.312==‘f’第一個表達(dá)式中,int型4要轉(zhuǎn)換為double型后再比較;第二個表達(dá)式中,char型’f’要轉(zhuǎn)換為int型后再進(jìn)行比較。范例5-17演示了各種關(guān)系操作符的使用。5.5.2關(guān)系表達(dá)式的值雖然C99定義了_BOOL,但現(xiàn)在大部分編譯器并不支持這一類型,而即使_BOOL型也不是關(guān)系表達(dá)式的值類型。關(guān)系表達(dá)式值在C語言中實際上作為int型處理。同時,已經(jīng)知道非0的數(shù)值的布爾值為真,而為0的數(shù)值的布爾值為假;那么反來過,布爾值如何轉(zhuǎn)化為int型值?關(guān)系表達(dá)式的布爾值如何轉(zhuǎn)換為int型值?布爾值轉(zhuǎn)換為int型值,一般遵從以下規(guī)則:假

0真

1布爾值為真的關(guān)系表達(dá)式的int型值為1,布爾值為假的關(guān)系表達(dá)式的int型值為0。范例5-18驗證了關(guān)系表達(dá)式的值和它的數(shù)據(jù)類型。5.5.3優(yōu)先級與結(jié)合性不同關(guān)系操作符的優(yōu)先級不同,其優(yōu)先級如下:較高優(yōu)先級:<、<=、>、>=(這4個優(yōu)先級相同);較低優(yōu)先級:==、!=(這2個優(yōu)先級相同)。相同優(yōu)先級的關(guān)系操作符的結(jié)合性為從左到右。關(guān)系運算符的優(yōu)先級比賦值運算符高,比運算操作符低,例如:m=1+2*3==4;5.6邏輯操作符與邏輯表達(dá)式邏輯操作符包括邏輯與操作符(&&)、邏輯或操作符(||)和邏輯非操作符(!)三種,其功能是進(jìn)行各種邏輯運算。含有邏輯操作符的表達(dá)式即為邏輯表達(dá)式。C語言中一些復(fù)雜功能的實現(xiàn)離不開邏輯表達(dá)式的使用。本節(jié)將討論邏輯操作符和邏輯表達(dá)式的使用,同時還討論了如何化簡邏輯表達(dá)式。5.6.1使用邏輯操作符三種邏輯操作符的使用形式如下:1.邏輯與操作符邏輯與操作符是個二元操作符,其標(biāo)準(zhǔn)調(diào)用方式如下:表達(dá)式1&&表達(dá)式2該表達(dá)式為邏輯與表達(dá)式,其中表達(dá)式1和表達(dá)式2可以為任意表達(dá)式,其功能為將兩個表達(dá)式的布爾值做邏輯與運算。邏輯與運算規(guī)則如下:真&&真=真真&&假=假假&&真=假假&&假=假5.6.1使用邏輯操作符2.邏輯或操作符邏輯或操作符也是二元操作符,其標(biāo)準(zhǔn)調(diào)用方式如下:表達(dá)式1||表達(dá)式2該表達(dá)式為邏輯或表達(dá)式,其中表達(dá)式1和表達(dá)式2也可以為任意表達(dá)式,其功能為將兩個表達(dá)式的布爾值做邏輯或運算。邏輯或運算規(guī)則如下:真||真=真真||假=真假|(zhì)|真=真假|(zhì)|假=假5.6.1使用邏輯操作符3.邏輯非操作符邏輯非操作符為一元操作符,只帶一個操作數(shù),使用時操作符位于操作數(shù)前,調(diào)用形式如下:!表達(dá)式1該表達(dá)式為邏輯非表達(dá)式,其中表達(dá)式1和表達(dá)式2也可以為任意表達(dá)式,其功能為將兩個表達(dá)式的布爾值做邏輯非運算。邏輯非運算規(guī)則如下:!真=假!假=真5.6.2邏輯表達(dá)式的值與關(guān)系表達(dá)式相同,雖然邏輯表達(dá)式在本書介紹中認(rèn)為是布爾值,但C編譯器中將其處理為int型。如果邏輯表達(dá)式的布爾值為真,則其int型值為1;如果其布爾值為假,則其int型值為0。5.6.3優(yōu)先級和結(jié)合性3個邏輯操作符的優(yōu)先級從高到低為:邏輯非操作符、邏輯與操作符和邏輯或操作符。結(jié)合性為從左到右。同時,邏輯非操作符的優(yōu)先級與符號操作符一致,比運算操作符高,更比關(guān)系操作符高;邏輯與操作符和邏輯或操作符的優(yōu)先級低于關(guān)系操作符,但高于賦值操作符。5.6.4化簡邏輯表達(dá)式3個邏輯操作符組合使用時,可以得到多個功能一致但形式不同的邏輯表達(dá)式。使用簡單的邏輯表達(dá)式來代替復(fù)雜的表達(dá)式是提高程序邏輯性的一個重要方法。下面是兩組功能一樣的邏輯表達(dá)式:第一組表達(dá)式如下:!(a||b)!a&&!b第二組表達(dá)式如下:!(a&&b)!a||!b使用以上功能相同的兩組邏輯表達(dá)式可以對一些復(fù)雜的、邏輯不清的表達(dá)式進(jìn)行簡化。5.7逗號操作符與逗號表達(dá)式逗號操作符是C語言中很重要的輔助型操作符。逗號操作符所在的表達(dá)式稱為逗號表達(dá)式。在逗號表達(dá)式中,逗號操作符將若干個表達(dá)式連接在一起形成一個語句。本節(jié)將討論逗號操作符和逗號表達(dá)式的使用。5.7.1使用逗號操作符逗號操作符是一個二元操作符,其標(biāo)準(zhǔn)使用形式如下:表達(dá)式1,表達(dá)式2該逗號表達(dá)式會以從左到右的順序先計算表達(dá)式1,再計算表達(dá)式2。逗號表達(dá)式的優(yōu)先級是所有操作符中最低的,因此可以將任意表達(dá)式直接作為逗號表達(dá)式的子表達(dá)式,且不會改變表達(dá)式的執(zhí)行順序和執(zhí)行邏輯。5.7.2逗號表達(dá)式的值與其余表達(dá)式一樣,逗號表達(dá)式也有一個值,其值等于表達(dá)式中最后一個子表達(dá)式的值。即:表達(dá)式1,表達(dá)式2,表達(dá)式3……

表達(dá)式n;上述表達(dá)式的值等于表達(dá)式n的值。范例5-22演示了逗號表達(dá)式的值及其使用方法。5.8操作符優(yōu)先級和結(jié)合性優(yōu)先級和結(jié)合性是操作符使用中十分重要的知識,在前面的討論中已經(jīng)多次涉及。本節(jié)將總結(jié)C語言中所有操作符的優(yōu)先級和結(jié)合性,包括一些本章未介紹的操作符。此外,本節(jié)還介紹了兩種更好地使用表達(dá)式的方法。5.8.1優(yōu)先級和結(jié)合性操作符的優(yōu)先級代表了它被執(zhí)行的優(yōu)先度。當(dāng)一個復(fù)雜表達(dá)式里含有多個操作符時,一般情況下,首先會根據(jù)操作符的優(yōu)先級來決定操作符的執(zhí)行順序;但操作符的優(yōu)先級相同時,應(yīng)該根據(jù)操作符的結(jié)合性來判斷執(zhí)行順序。5.8.1優(yōu)先級和結(jié)合性右表是所有操作符優(yōu)先級和結(jié)合性的總結(jié)。5.8.1優(yōu)先級和結(jié)合性1.前置操作符前置操作符都是一元操作符,其優(yōu)先級為2,為第二高。很容易理解將它們得結(jié)合性規(guī)定為從右到左的原因,例如:+-

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論