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