JAVA语言

形式关系表达式 ? 表达式1 : 表达式2

求值规则

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

说明

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

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

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

publicclassdemo{

publicstaticvoidmain(String[]args){

inta=10,b=20,y;

a>b?(y=a):(y=b);//1,这样写是错误的

y=a>b?a:b;//2,这样写是正确的

y=a

}

}

以上程序中,1处错误是由于条件表达式的值没有参与运算,不能构成语句。3处(b《c?a:c)先结合,再将这个值参与到另一个条件运算中去,是合法的,这也说明了条件运算符的右结合性。

运算符妙用

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

程序示例:ChooseDemo05.java

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

publicclassChooseDemo05{

publicstaticvoidmain(String[]args){

intapples=1;//苹果的个数

System.out.println(“Ihave”+apples+“apple”+(apples==1?“。”:“s.”));

}

}

当然,还有其他的应用:

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

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

C运算符的结合方向

在标准C语言的文档里,对操作符的结合性并没有作出非常清楚的解释。一个满分的回答是:它是仲裁者,在几个操作符具有相同的优先级时决定先执行哪一个。

每个操作符拥有某一级别的优先级,同时也拥有左结合性或右结合性。优先级决定一个不含括号的表达式中操作数之间的“紧密”程度。例如,在表达式a*b+c中,乘法运算的优先级高于加法运算符的优先级,所以先执行乘法a*b,而不是加法b+c。

但是,许多操作符的优先级都是相同的。这时,操作符的结合性就开始发挥作用了。在表达式中如果有几个优先级相同的操作符,结合性就起仲裁的作用,由它决定哪个操作符先执行。像下面这个表达式:

int a, b=1, c=2;

a=b=c;

我们发现,这个表达式只有赋值符,这样优先级就无法帮助我们决定哪个操作先执行,是先执行b=c呢,还是先执行a=b?如果按前者,a的结果为2,如果按后者,a的结果为1。 所有的赋值符(包括复合赋值)都具有右结合性,就是说在表达式中最右边的操作最先执行,然后从右到左依次执行。这样,c先赋值给b,然后b再赋值给a,最终a的值是2。类似地,具有左结合性的操作符(如位操作符“&”和“|”)则是从左至右依次执行。

所以,遇到一个表达式时,先根据运算符的优先级将表达式拆分成几个子表达式,然后在每个子表达式中根据运算符的结合性来进一步确定执行的顺序。

【特殊情况】 看下面这个C表达式:

a+++b;

结果是(a++)+b还是a+(++b)呢?答案是前者,因为在遇到这种情况时,C编译器会将表达式按照从左往右的顺序尽量匹配出一个子表达式,所以当C编译器遇到a且后面有3个+号时,会首先尝试匹配a+++,当然这是没有意义的,所以接着尝试a++发现这是有意义的匹配,因此确定a++为第一个子表达式,然后再接着匹配+号和b。因此结果是(a++)+b。

这种情况不能算是上面所讨论的运算符优先级和结合性的特例,因为它发生在优先级和结合性判断之前,但确实具有一些迷惑性,所以建议在遇到这种情况时给其加上括号,以增加可读性且避免可能发生的不必要的错误。

c语言条件运算符的作用,条件运算符的用法_C运算符的结合方向相关推荐

  1. C语言中 * “星号”的九种用法

    C语言中 * "星号"的九种用法 乘法运算符 复合赋值运算符 假读符 注释符 普通符号 指针定义符 指向运算符 行列地址转换符 地址值符 乘法运算 c=ab; a=2, b=3, ...

  2. C语言Double的作用,C语言double和float 实例分析用法

    C语言double和float 实例分析用法 C语言double和float 实例分析用法 小数也称实数或浮点数.例如,0.0.75.0.4.023.0.27.-937.198 都是合法的小数.这是常 ...

  3. c语言 cstring “+”: 运算符不起任何作用;应输入带副作用的运算符_国家计算机二级考试C语言选择题高频考点汇总,干货满满...

    [考点1]C语言的构成 1.源程序由函数构成,每个函数完成相对独立的功能. 2.每个源程序中必须有且只能有一个主函数,可以放在任何位置,但程序总是从主函数开始执行. 3.函数体:在函数后面用一对花括号 ...

  4. c语言选择结构作用,c语言选择结构程序设计教案

    <c语言选择结构程序设计教案>由会员分享,可在线阅读,更多相关<c语言选择结构程序设计教案(16页珍藏版)>请在人人文库网上搜索. 1.选择结构程序设计(一)说明内容1关系运算 ...

  5. channelinactive触发后不关闭channel_Go语言 | goroutine不只有基础的用法,还有这些你不知道的操作...

    今天是golang专题第15篇文章,我们来继续聊聊channel的使用. 在我们的上篇文章当中我们简单介绍了golang当中channel的使用方法,channel是golang当中一个非常重要的设计 ...

  6. java case用法_Go语言 | goroutine不只有基础的用法,还有这些你不知道的操作

    今天是golang专题第15篇文章,我们来继续聊聊channel的使用. 在我们的上篇文章当中我们简单介绍了golang当中channel的使用方法,channel是golang当中一个非常重要的设计 ...

  7. C语言,变长数组的用法

    ​ 在我的<C语言,结构体成员的地址>文章中,定义了一个demo_node结构体,其中用到变长数组char addr[0].本文以此为例,对C语言变长数组的基本用法展开介绍. #pragm ...

  8. C语言:static作用(修饰函数、局部变量、全局变量)

    C语言:static作用(修饰函数.局部变量.全局变量) 一. static全局变量与普通的全局变量有什么区别 ? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.  全局变 ...

  9. python语言入门n-python语言入门之字符串的一些用法

    本篇教程探讨了python语言入门之字符串的一些用法,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 一.字符串的拼接: a="123' b="ab ...

最新文章

  1. Linux下nginx支持.htaccess文件实现伪静态的方法!
  2. R语言使用ggpubr包的ggarrange函数组合多张结论图:使用ggpubr包将表格嵌套在可视化图像中
  3. mybatis中的mapper设计与原理
  4. Java学习笔记——局部变量和成员变量
  5. 【HDU - 2639】Bone Collector II (第K大背包,dp,STLset)
  6. 《Java程序设计》第4周学习总结
  7. Excel导出时数据中有特殊字符的可能会出错
  8. CSS3 transform 属性
  9. 性能测试方案(计划)模板
  10. 微信开放平台申请流程讲解与注意事项(未完待续)
  11. 构建高可用MYSQL主从复制集群
  12. 数据抓取软件火车采集器如何导入TXT 、EXCEL数据
  13. ElasticSearch Java 客户端连接ElasticSearch
  14. Matlab 科研绘图汇总
  15. 阿里全面进军IoT,语音将是人与IoT最自然的交互方式
  16. DEV、SIT、UAT、PET、SIM、PRD、PROD缩写介绍
  17. 前端开发:转换数据类型
  18. 配置Microsoft SQL Server安装,win7,win10
  19. 智能家居系统智能联动控制
  20. SSM+特殊病例查询系统 毕业设计-附源码231832

热门文章

  1. ubuntu下链接open***
  2. 雷电交加,雨水倾泻--北京
  3. Sentinel底层LongAdder的计数实现
  4. CSS中box-sizing: border-box;的作用
  5. Java中list对象的三种遍历方式
  6. shell等待特定进程pid退出的方法
  7. 在浏览器设置里能看到cookie, 页面调试Application里看不到
  8. Spring Security中HttpSecurity常用方法及说明
  9. java解决XSS攻击常用方法总结
  10. selenium模拟登陆豆瓣网