條件運(yùn)算符優(yōu)先級(jí)高于賦值、逗號(hào)運(yùn)算符,低于其他運(yùn)算符。
條件運(yùn)算符是什么
運(yùn)算符
表達(dá)式為:表達(dá)式1?表達(dá)式2:表達(dá)式3
先求解表達(dá)式1,
若其值為真(非0)則將表達(dá)式2的值作為整個(gè)表達(dá)式的取值,否則(表達(dá)式1的值為0)將表達(dá)式3的值作為整個(gè)表達(dá)式的取值。
例如:
1、max=(a》b)?a:b
就是將a和b二者中較大的一個(gè)賦給max。
2、min=(a《b)?a:b
就是將a和b二者中較小的一個(gè)賦給min。
優(yōu)先級(jí)
條件運(yùn)算符優(yōu)先級(jí)高于賦值、逗號(hào)運(yùn)算符,低于其他運(yùn)算符
例如:
?、?m《n ? x : a+3
等價(jià)于:(m《n) ?(x) :(a+3)
⑵ a++》=10 && b--》20 ? a : b
等價(jià)于:(a++》=10 && b--》20) ? a : b
⑶ x=3+a》5 ? 100 : 200
等價(jià)于:x= (( 3+a》5 ) ? 100 : 200 )
結(jié)合性
條件運(yùn)算符具有右結(jié)合性
當(dāng)一個(gè)表達(dá)式中出現(xiàn)多個(gè)條件運(yùn)算符時(shí),應(yīng)該將位于最右邊的問號(hào)與離它最近的冒號(hào)配對(duì),并按這一原則正確區(qū)分各條件運(yùn)算符的運(yùn)算對(duì)象。
例如:
w《x ? x+w : x《y ? x : y
與 w《x ? x+w : ( x《y ? x : y) 等價(jià)
與 (w《x ? x+w : x《y) ? x : y 不等價(jià)
JAVA語言:
形式
關(guān)系表達(dá)式 ? 表達(dá)式1 : 表達(dá)式2
求值規(guī)則
求解關(guān)系表達(dá)式,根據(jù)關(guān)系表達(dá)式的布爾值決定取值:關(guān)系表達(dá)式的值為true時(shí)取表達(dá)式1的值;關(guān)系表達(dá)式的值為false時(shí)取表達(dá)式2的值。
說明
1、條件運(yùn)算符的優(yōu)先級(jí)低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,高于賦值運(yùn)算符。
2、JAVA中條件運(yùn)算表達(dá)式中的關(guān)系表達(dá)式值的類型必須為布爾類型,只能是true或false。
3、結(jié)合性也是右結(jié)合性。
4、與C語言不同的是,JAVA中條件表達(dá)式的值必須參與運(yùn)算。運(yùn)算符妙用:
——用條件表達(dá)式判斷輸出單詞的單復(fù)數(shù)。
程序示例:ChooseDemo05.java
程序中會(huì)自動(dòng)根據(jù)apples的個(gè)數(shù)來輸出單詞的單數(shù)或復(fù)數(shù)。
當(dāng)然,還有其他的應(yīng)用:
1、 在某些地方使用“他”還是“她”。
2、日期輸出時(shí)決定使用后綴“st”、“nd”等。
條件運(yùn)算符有哪些
1. 關(guān)系運(yùn)算符
關(guān)系運(yùn)算實(shí)際上是邏輯比較運(yùn)算,它是邏輯運(yùn)算中的一種。關(guān)系運(yùn)算符的作用是確定兩個(gè)數(shù)據(jù)之間是否存在某種關(guān)系。C語言規(guī)定的6種關(guān)系運(yùn)算符及其有關(guān)的說明見表3-6。
表3-6 算術(shù)運(yùn)算符
運(yùn)算符 含義 運(yùn)算對(duì)象個(gè)數(shù) 結(jié)合方向 簡(jiǎn)例
》 大于 雙目運(yùn)算符 自左至右 a》b,3》8
》 = 大于等于 雙目運(yùn)算符 自左至右 a》=b,3》=2
《 小于 雙目運(yùn)算符 自左至右 a 《 = 小于等于 雙目運(yùn)算符 自左至右 a《=b,3《=b
?。?= 不等于 雙目運(yùn)算符 自左至右 a!=b,3!=5%7
= = 恒等于 雙目運(yùn)算符 自左至右 a==b,3==5*a
關(guān)系運(yùn)算符都是雙目運(yùn)算符,其結(jié)合性是從左到右結(jié)合。優(yōu)先級(jí)分為兩級(jí):
高級(jí):<、<=、>、>=
低級(jí):==、!=
關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符。
2. 關(guān)系表達(dá)式
用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來的式子稱為關(guān)系表達(dá)式。它的一般形式為:
表達(dá)式1 關(guān)系運(yùn)算符 表達(dá)式2
其中,關(guān)系運(yùn)算符指明了對(duì)表達(dá)式所實(shí)施的操作?!氨磉_(dá)式1”和“表達(dá)式2”是關(guān)系運(yùn)算的對(duì)象,它們可以是算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、 賦值表達(dá)式和字符表達(dá)式。但一般關(guān)系運(yùn)算要求關(guān)系運(yùn)算符連接的兩個(gè)運(yùn)算對(duì)象為同類型數(shù)據(jù)。例如:
a+b》3*c 兩個(gè)算術(shù)表達(dá)式的值作比較
(a=b)《(b=10%c) 兩個(gè)賦值表達(dá)式的值作比較
?。╝《=b)==(b》c) 兩個(gè)關(guān)系表達(dá)式的值作比較
‘A’!=‘a(chǎn)’ 兩個(gè)字符表達(dá)式的值作比較
關(guān)系式只有兩種可能的結(jié)果:或者它所描述的關(guān)系成立,或者這個(gè)關(guān)系不成立,所以說一個(gè)關(guān)系表達(dá)式描述的是一種邏輯判斷。若關(guān)系成立,說明關(guān)系式表述的關(guān)系是“真”的,稱邏輯值為“真”,用1表示;若關(guān)系不成立,說明關(guān)系式表述的關(guān)系是“假”的,稱邏輯值為“假”,用0表示。所以關(guān)系表達(dá)式的運(yùn)算結(jié)果一定是邏輯值。
進(jìn)行關(guān)系運(yùn)算時(shí),先計(jì)算表達(dá)式的值,然后再進(jìn)行關(guān)系比較運(yùn)算。例如:
a=2,b=3,c=4,則上述關(guān)系表達(dá)式的值為:
a+b》3*c (5》12)關(guān)系不成立 表達(dá)式結(jié)果值為0(假)
(a+=b)《(b*=10%c) (5《6) 關(guān)系成立 表達(dá)式結(jié)果值為1 (真)
?。╝《=b)==(b》c) (1==0)關(guān)系不成立 表達(dá)式結(jié)果值為0(假)
‘A’!=‘a(chǎn)’ (65!=97)關(guān)系成立 表達(dá)式結(jié)果值為1(真)
以關(guān)系表達(dá)式“a+b》3*c”為例,因?yàn)樗阈g(shù)運(yùn)算的優(yōu)先級(jí)高于關(guān)系運(yùn)算,所以先計(jì)算a+b和3*c的值,結(jié)果分別為5和12,再將5和12進(jìn)行關(guān)系比較,其運(yùn)算結(jié)果為0。
在表達(dá)式中連續(xù)使用關(guān)系運(yùn)算符時(shí),要注意正確表達(dá)含義,注意運(yùn)算優(yōu)先級(jí)和結(jié)合性。
例如,變量x的取值范圍為“0≤x≤20”時(shí),不能寫成“0《=x《=20”。因?yàn)殛P(guān)系表達(dá)式“0《=x《=20”的運(yùn)算過程是:按照優(yōu)先級(jí),先求出“0《=x”的結(jié)果,再將結(jié)果1或0作“《=9”的判斷,這樣無論x取何值,最后表達(dá)式一定成立,結(jié)果一定為1。這顯然違背了原來的含義。此時(shí),就要運(yùn)用下面介紹的邏輯運(yùn)算符進(jìn)行連接,即應(yīng)寫為:“0《=x && x《=9”。
3.4.2 邏輯運(yùn)算符與邏輯表達(dá)式
1.邏輯運(yùn)算符
C語言規(guī)定的3種邏輯運(yùn)算符及其有關(guān)的說明見表3-7。
表3-7 邏輯運(yùn)算符
運(yùn)算符 含義 運(yùn)算對(duì)象個(gè)數(shù) 結(jié)合方向 簡(jiǎn)例
&& 邏輯與 雙目運(yùn)算符 自左向右 a&&b,3》8&&a==b
|| 邏輯或 雙目運(yùn)算符 自左向右 a||b,3《=b8||a==b
! 邏輯非 單目運(yùn)算符 自右向左 !a,!a==b
邏輯運(yùn)算要求運(yùn)算對(duì)象為“真”(非0)或“假”(0)。這三種邏輯運(yùn)算符的運(yùn)算規(guī)則可用表3-8的真值表表示:
表3-8 邏輯運(yùn)算真值表
?。?b a&&b a||b !a !b
0 0 0 0 1 1
0 非0 0 1 1 0
非0 0 0 1 0 1
非0 非0 1 1 0 0
在一個(gè)邏輯表達(dá)式中,可以含有多個(gè)邏輯運(yùn)算符,其優(yōu)先級(jí)是:“!”最高,“&&”次之,“||”最低;邏輯運(yùn)算優(yōu)先級(jí)低于所有關(guān)系運(yùn)算,而“!”優(yōu)先級(jí)高于所有算術(shù)運(yùn)算。
例如:某程序中有如下說明:int a=3,b=1, x=2, y=0;則:
?、?(a》b) && (x》y) 的值為1。
?、?a》b && x》y 的值為1。
注意:①②兩式是等價(jià)的,因?yàn)椤?&”運(yùn)算優(yōu)先級(jí)低于關(guān)系運(yùn)算,故括號(hào)可以省略。
?、?(y||b) && (y||a) 的值為1。
?、?y||b && y||a 的值為1。
注意:③④兩式結(jié)果雖然一樣,但兩式的含義不同。③式中由于括號(hào)的優(yōu)先級(jí)高于“&&”,因此,先計(jì)算“y||b”和“y||a”后,再將兩個(gè)結(jié)果進(jìn)行“&&”運(yùn)算。而④式由于“&&”的優(yōu)先級(jí)高于“||”,故要先計(jì)算“b&&y”,其結(jié)果為0,再計(jì)算“y||0”,其值也為0,最后計(jì)算“0||a”,結(jié)果為1。由此可見,運(yùn)算符的優(yōu)先級(jí)制約著表達(dá)式的計(jì)算次序。
?、?!a || a》b 的值為1。
此式中“!”的優(yōu)先級(jí)高于“>”,而 “>”的優(yōu)先級(jí)高于“||”,故先計(jì)算“!a”,其值為0,再計(jì)算“a》b”,其值為1,最后計(jì)算“0||1”,值為1。
3.4.3 條件運(yùn)算符與條件表達(dá)式
條件運(yùn)算符是C語言中唯一具的三目運(yùn)算符,就是說它有三個(gè)運(yùn)算對(duì)象。條件運(yùn)算符的形式是“? :”由它構(gòu)成的表達(dá)式稱為條件表達(dá)式。其形式為:
表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3
條件運(yùn)算符的“?”個(gè)“:”總是成對(duì)出現(xiàn)的。條件表達(dá)式的運(yùn)算功能是:先計(jì)算表達(dá)式1的值,若值為非0,則計(jì)算表達(dá)式2的值,并將表達(dá)式2的值作為整個(gè)條件表達(dá)式的結(jié)果;若表達(dá)式1的值為0,則計(jì)算表達(dá)式3的值,并將表達(dá)式2的值作為整個(gè)條件表達(dá)式的結(jié)果。例如有以下條件表達(dá)式:
?。╝》b)?a+b:a-b
當(dāng)a=8,b=4,c=3時(shí),求解條件表達(dá)式的過程如下:
先計(jì)算關(guān)系式a》b,結(jié)果為1,因其值為真,則計(jì)算a+b的結(jié)果為12,這個(gè)12就是整個(gè)條件表達(dá)式的結(jié)果。請(qǐng)?zhí)貏e注意,此時(shí)不再計(jì)算表達(dá)式a-b了。如果關(guān)系式a》b的結(jié)果為0,就不再計(jì)算表達(dá)式a+b了。這一點(diǎn)在應(yīng)用中很重要。
條件表達(dá)式的優(yōu)先級(jí)高于賦值運(yùn)算,但低于所有關(guān)系運(yùn)算、邏輯運(yùn)算和算術(shù)運(yùn)算。其結(jié)合性是自右向左結(jié)合,當(dāng)多個(gè)條件表達(dá)式嵌套使用時(shí),每個(gè)后續(xù)的“:”總與前面最近的、沒有配對(duì)的“?”相聯(lián)系。例如在條件表達(dá)式“a》0 ? a/b:a《0 ? a+b:a-b”中,出現(xiàn)兩個(gè)條件表達(dá)式的嵌套,求解這個(gè)表達(dá)式時(shí)先計(jì)算后面一個(gè)條件表達(dá)式“a《0 ? a+b:a-b”的值,然后再與前面的“a》0 ? a/b:”組合。
使用條件表達(dá)式可以使程序簡(jiǎn)潔明了。例如,賦值語句“z=(a》b)?a:b ”中使用了條件表達(dá)式,很簡(jiǎn)潔地表示了判斷變量a與b的最大值并賦給變量z的功能。所以,使用條件表達(dá)式可以簡(jiǎn)化程序
例3-8:定義高等數(shù)學(xué)中常用的符號(hào)函數(shù)sign的數(shù)學(xué)定義如下。
對(duì)應(yīng)的C函數(shù)定義如下:
/* L3_8.C */
double sign(double x)
{ return x》0 ? 1:(x==0 ? 0:-1);
}
評(píng)論