
条件运算符的优先级高于赋值运算符和逗号运算符,低于其他运算符。
什么是条件运算符?
表达式为:表达式1?表情2:表情3
首先求解表达式1,
如果其值为真(非0),则取表达式2的值作为整个表达式的值,否则(表达式1的值为0),取表达式3的值作为整个表达式的值。
例如:
1、 max=(a"b)?甲:乙
就是把A和B中较大的一个赋给max。
2、min=(a《b》?甲:乙
就是把a和b中较小的一个赋值给min。
优先
条件运算符的优先级高于赋值运算符和逗号运算符,低于其他运算符。
例如:
m《n?徐:a 3
相当于:(m“n”?(十):(a 3)
a》=10 b-》20?甲:乙
相当于:(a)=10 b-"20)?甲:乙
x=3 a》5?100 : 200
相当于:x=((3 a) 5)?100 : 200 )
结合性
条件运算符是右结合的。
当一个表达式中出现多个条件运算符时,最右边的问号应与最近的冒号配对,并根据此原则正确区分每个条件运算符的操作数。
例如:
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语言:
形式
关系表达式?表达式1:表达式2
评估规则
求解关系表达式,根据关系表达式的布尔值确定值:如果关系表达式的值为真,则取表达式1的值;当关系表达式的值为假时,取表达式2的值。
解释
1、条件运算符的优先级低于关系运算符和算术运算符,但高于赋值运算符。
2、 Java中条件运算表达式中关系表达式值的类型必须为布尔型,且只能为真或假。
3、绑定也是右绑定。
4、与C语言不同,JAVA中条件表达式的值必须参与运算。运算符的妙用:
——使用条件表达式判断输出单词的单复数。
程序示例:ChooseDemo05.java
程序会根据苹果的数量自动输出单复数。
当然,还有其他应用:
1、有些地方用“他”或“她”。
2、决定在输出日期时使用后缀“st”和“nd”。
有哪些条件运算符?1.关系运算符
关系运算其实就是逻辑比较运算,是逻辑运算的一种。关系运算符的作用是确定两个数据之间是否存在关系。C语言中指定的六种关系运算符及其相关描述见表3-6。
表3-6算术运算符
对象数和运算符方向组合的一个简单例子意义运算
”从左到右大于双目运算符A“B,3”8
=大于或等于双目运算符从左到右A=b,3=2
从左到右小于双目运算符a=从左到右小于或等于双目运算符a=b,3=b
!=从左到右不等于双目算子a!=b,3!=5%7
==常数等于双目算子从左到右a==b,3==5 * A。
关系运算符是双目运算符,它们的组合是从左到右的。优先级分为两个级别:
高级:<,<=,>,>=
低级:==,=
关系运算符的优先级低于算术运算符。
2.关系表达式
用关系运算符连接两个表达式的公式称为关系表达式。它的一般形式是:
表达式1关系运算符表达式2
其中,关系运算符表示对表达式执行的操作。“表达式1”和“表达式2”是关系运算的对象,它们可以是算术表达式、关系表达式、逻辑表达式、赋值表达式和字符表达式。然而,一般的关系运算要求由关系运算符连接的两个操作数是相同类型的数据。例如:
A b"3 * c两个算术表达式。
(a=b)”(b=10% c)比较两个赋值表达式的值。
(a 《=b)==(b》 c)比较两个关系表达式的值。
一个!='a' a '比较两个字符表达式的值。
关系表达式只有两种可能的结果:要么它描述的关系成立,要么它描述的关系不成立,所以关系表达式描述的是逻辑判断。如果关系成立,则表示关系所表达的关系为“真”,逻辑值称为“真”,用1表示;如果关系不成立,说明关系表达式表达的关系为“假”,逻辑值称为“假”,用0表示。所以关系表达式的运算结果必须是逻辑值。
执行关系运算时,首先计算表达式的值,然后执行关系比较运算。例如:
A=2,b=3,c=4,则上述关系表达式的值为:
A b"3 * c (5"12)关系不成立,表达式的结果值为0 (false)。
(a=b)"(b *=10% c)"(5"6")表达式的结果为1(真)。
(a 《=b)==(b》 c) (1==0)表达式的结果为0 (false)。
一个!='a' (65!=97)关系表达式的结果值为1(真)。
以关系表达式“a b”3 * c”为例。因为算术运算的优先级高于关系运算,所以先计算AB和3 * c的值,结果分别是5和12。然后比较5和12的关系,运算结果为0。
在表达式中连续使用关系运算符时,要注意意义的正确表达、运算优先级和组合。
比如变量x的取值范围为“0 x 20”时,不能写成“0=x=20”。因为关系表达式“0=x=20”的运算过程是:根据优先级,先求出“0=x”的结果,再判断结果1或0为“=9”,所以不管X取什么值,最终表达式都必须成立,结果必须为1。这显然违背了原意。此时,就需要用下面的逻辑运算符来连接,即应该写成:“0”=x x”=9”。
逻辑运算符和逻辑表达式
1.逻辑运算符
有关C语言中指定的三个逻辑运算符及其相关描述,请参见表3-7。
表3-7逻辑运算符
对象数和运算符方向组合的一个简单例子意义运算
逻辑和双目运算符从左到右ab,3》8a==b=b
|||逻辑或双目运算符从左到右a||b,3"=B8 ||| A==B"
!从右到左的逻辑非单目算子!一,a==b
逻辑运算要求操作数为真(非0)或假(0)。这三个逻辑运算符的运算规则可以用表3-8中的真值表来表示:
表3-8逻辑运算真值表
a b ab a||b!答!b
0 0 0 0 1 1
0不是0 0 1 1 0。
非0 0 0 1 0 1
非0非0 1 0 0
在一个逻辑表达式中,可以有多个具有优先级的逻辑运算符:“!”最高,其次是“|”,最低;逻辑运算的优先级低于所有关系运算,并且“!”优先于所有算术运算。
比如一个程序有如下指令:int a=3,b=1,x=2,y=0;然后:
(a)b)(x)y)的值为1。
a“b x”y的值为1。
注意: 两个表达式是等价的,因为“”运算的优先级低于关系运算,所以括号可以省略。
(y | | b)(y | | a)的值为1。
y | | |乘y || a的值为1。
注: 虽然两个公式的结果相同,但意义不同。(3)在公式中,括号的优先级高于“”,所以先计算“y||b”和“y||a”,再对两个结果进行运算。(4)由于“”的优先级高于“||”,所以需要先计算“by”,结果为0,再计算“y||0”,最后计算“0||a”,结果为1。因此,运算符的优先级限制了表达式的计算顺序。
!a || a"b的值是1。
在这个公式中,“!”的优先级高于“>”,而“>”的优先级高于“||”,所以“!A”,其值为0,然后计算“A”b”,其值为1,最后计算“0||1”,其值为1。
3.4.3条件运算符和条件表达式
条件运算符是C语言中唯一的三元运算符,也就是说,它有三个操作数。条件运算符的形式是“?“它形成的表达式叫做条件表达式。它的形式是:
表情1?表情2:表情3
"?"条件运算符A":"总是成对出现。条件表达式的运算作用是:首先计算表达式1的值,如果值非0,则计算表达式2的值,将表达式2的值作为整个条件表达式的结果;如果表达式1的值为0,则计算表达式3的值,并将表达式2的值作为整个条件表达式的结果。例如,有以下条件表达式:
(a》b)?答:答-答
当a=8,b=4,c=3时,条件表达式的求解过程如下:
先计算关系A”B,结果为1。因为它的值为真,所以计算a b的结果是12,而这个12就是整个条件表达式的结果。请注意,此时不再对表达式a-b求值。如果关系A"b的结果为0,则不会计算表达式A"b。这在应用中非常重要。
条件表达式的优先级高于赋值运算,但低于所有关系运算、逻辑运算和算术运算。它的组合是从右到左。当多个条件表达式嵌套时,每个后续的“:”总是与最近的不成对“?”在一起去联系。例如,在条件表达式“a”0?甲/乙:甲《0 ? a+b:a-b”中,出现两个条件表达式的嵌套,求解这个表达式时先计算后面一个条件表达式“a《0 ? a+b:a-b”的值,然后再与前面的“a》 0?甲/乙:“结合。
使用条件表达式可以使程序简洁明了。比如赋值语句“z=(a) b)?a:b”中使用了条件表达式,简洁地表达了判断变量A和B的最大值并赋给变量Z的函数.因此,使用条件表达式可以简化程序。
例3-8:定义高等数学中常用的符号函数符号数学定义如下。
相应的C函数定义如下:
双符号(双x)
{ return x } 0?1:(x==0?0:-1);
}









