条件运算符是什么_条件运算符有哪些

编程语言及工具

104人已加入

描述

  条件运算符优先级高于赋值、逗号运算符,低于其他运算符。

  条件运算符是什么

  运算符

  表达式为:表达式1?表达式2:表达式3

  先求解表达式1,

  若其值为真(非0)则将表达式2的值作为整个表达式的取值,否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。

  例如:

  1、max=(a》b)?a:b

  就是将a和b二者中较大的一个赋给max。

  2、min=(a《b)?a:b

  就是将a和b二者中较小的一个赋给min。

  优先级

  条件运算符优先级高于赋值、逗号运算符,低于其他运算符

  例如:

  ⑴ 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 )

  结合性

  条件运算符具有右结合性

  当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。

  例如:

  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

  求值规则

  求解关系表达式,根据关系表达式的布尔值决定取值:关系表达式的值为true时取表达式1的值;关系表达式的值为false时取表达式2的值。

  说明

  1、条件运算符的优先级低于关系运算符和算术运算符,高于赋值运算符。

  2、JAVA中条件运算表达式中的关系表达式值的类型必须为布尔类型,只能是true或false。

  3、结合性也是右结合性。

  4、与C语言不同的是,JAVA中条件表达式的值必须参与运算。运算符妙用:

  ——用条件表达式判断输出单词的单复数。

  程序示例:ChooseDemo05.java

  程序中会自动根据apples的个数来输出单词的单数或复数。

  当然,还有其他的应用:

  1、 在某些地方使用“他”还是“她”。

  2、日期输出时决定使用后缀“st”、“nd”等。

  运算符

  条件运算符有哪些

  1. 关系运算符

  关系运算实际上是逻辑比较运算,它是逻辑运算中的一种。关系运算符的作用是确定两个数据之间是否存在某种关系。C语言规定的6种关系运算符及其有关的说明见表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(假)

  (a+=b)《(b*=10%c) (5《6) 关系成立 表达式结果值为1 (真)

  (a《=b)==(b》c) (1==0)关系不成立 表达式结果值为0(假)

  ‘A’!=‘a’ (65!=97)关系成立 表达式结果值为1(真)

  以关系表达式“a+b》3*c”为例,因为算术运算的优先级高于关系运算,所以先计算a+b和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”。

  3.4.2 逻辑运算符与逻辑表达式

  1.逻辑运算符

  C语言规定的3种逻辑运算符及其有关的说明见表3-7。

  表3-7 逻辑运算符

  运算符 含义 运算对象个数 结合方向 简例

  && 逻辑与 双目运算符 自左向右 a&&b,3》8&&a==b

  || 逻辑或 双目运算符 自左向右 a||b,3《=b8||a==b

  ! 逻辑非 单目运算符 自右向左 !a,!a==b

  逻辑运算要求运算对象为“真”(非0)或“假”(0)。这三种逻辑运算符的运算规则可用表3-8的真值表表示:

  表3-8 逻辑运算真值表

  a 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

  在一个逻辑表达式中,可以含有多个逻辑运算符,其优先级是:“!”最高,“&&”次之,“||”最低;逻辑运算优先级低于所有关系运算,而“!”优先级高于所有算术运算。

  例如:某程序中有如下说明: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||b && y||a 的值为1。

  注意:③④两式结果虽然一样,但两式的含义不同。③式中由于括号的优先级高于“&&”,因此,先计算“y||b”和“y||a”后,再将两个结果进行“&&”运算。而④式由于“&&”的优先级高于“||”,故要先计算“b&&y”,其结果为0,再计算“y||0”,其值也为0,最后计算“0||a”,结果为1。由此可见,运算符的优先级制约着表达式的计算次序。

  ⑤ !a || a》b 的值为1。

  此式中“!”的优先级高于“>”,而 “>”的优先级高于“||”,故先计算“!a”,其值为0,再计算“a》b”,其值为1,最后计算“0||1”,值为1。

  3.4.3 条件运算符与条件表达式

  条件运算符是C语言中唯一具的三目运算符,就是说它有三个运算对象。条件运算符的形式是“? :”由它构成的表达式称为条件表达式。其形式为:

  表达式1 ? 表达式2 : 表达式3

  条件运算符的“?”个“:”总是成对出现的。条件表达式的运算功能是:先计算表达式1的值,若值为非0,则计算表达式2的值,并将表达式2的值作为整个条件表达式的结果;若表达式1的值为0,则计算表达式3的值,并将表达式2的值作为整个条件表达式的结果。例如有以下条件表达式:

  (a》b)?a+b:a-b

  当a=8,b=4,c=3时,求解条件表达式的过程如下:

  先计算关系式a》b,结果为1,因其值为真,则计算a+b的结果为12,这个12就是整个条件表达式的结果。请特别注意,此时不再计算表达式a-b了。如果关系式a》b的结果为0,就不再计算表达式a+b了。这一点在应用中很重要。

  条件表达式的优先级高于赋值运算,但低于所有关系运算、逻辑运算和算术运算。其结合性是自右向左结合,当多个条件表达式嵌套使用时,每个后续的“:”总与前面最近的、没有配对的“?”相联系。例如在条件表达式“a》0 ? a/b:a《0 ? a+b:a-b”中,出现两个条件表达式的嵌套,求解这个表达式时先计算后面一个条件表达式“a《0 ? a+b:a-b”的值,然后再与前面的“a》0 ? a/b:”组合。

  使用条件表达式可以使程序简洁明了。例如,赋值语句“z=(a》b)?a:b ”中使用了条件表达式,很简洁地表示了判断变量a与b的最大值并赋给变量z的功能。所以,使用条件表达式可以简化程序

  例3-8:定义高等数学中常用的符号函数sign的数学定义如下。

  对应的C函数定义如下:

  /* L3_8.C */

  double sign(double x)

  { return x》0 ? 1:(x==0 ? 0:-1);

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分