条件运算符的用法详解:优先级、语法及实例分析

条件运算符的用法

条件运算符的用法详解:优先级、语法及实例分析

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

C语言

运算符表达式为:表达式1?表达式2:表达式3

先求解表达式1,

如果其值为真(非 0),就把表达式 2 的值当作整个表达式的取值;如果其值为假(表达式 1 的值为 0),就把表达式 3 的值当作整个表达式的取值。

例如:

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

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

2、min=(a

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

优先级

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

例如:

⑴ m

⑵ a++>=10 && b-->20 ? a : b

如果 a 自增后大于等于 10 并且 b 自减后等于 20,那么就返回 a,否则返回 b

⑶ x=3+a>5 ? 100 : 200

等价于:如果 3+a 大于 5,那么 x 等于 100;如果 3+a 不大于 5,那么 x 等于 200。

结合性

条件运算符具有右结合性

当一个表达式里有多个条件运算符时,要把位于最右边的问号和离它最近的冒号配成一对,并且按照这一原则来准确区分各个条件运算符的运算对象。

例如:

与 w

与 (wJAVA语言

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

求值规则

求解关系表达式,依据关系表达式的布尔值来确定取值。当关系表达式的值为 true 时,就取表达式 1 的值;而当关系表达式的值为 false 时,就取表达式 2 的值。

说明

条件运算符的优先级比关系运算符和算术运算符低,同时比赋值运算符高。

JAVA 中条件运算表达式里的关系表达式值的类型得是布尔类型,仅能是 true 或者 false。同时,其结合性为右结合性。

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

publicclassdemo{

公共静态 void 主函数(字符串数组 args){

inta=10,b=20,y;

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

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

y=a

以上程序中,一处错误在于条件表达式的值未参与运算,无法构成语句。三处(b《c?a:c)先进行结合操作,然后将此值参与到另一个条件运算中,这种情况是合法的,这体现了条件运算符的右结合性。

运算符妙用

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

程序示例:ChooseDemo05.java

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

publicclassChooseDemo05{

publicstaticvoidmain(String[]args){

intapples=1;//苹果的个数

当然,还有其他的应用:

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。

这种情况不能算作上述所讨论的运算符优先级和结合性的特殊情形。因为它在优先级和结合性判断之前就已发生,不过确实具有一定的迷惑性。所以建议在碰到这种情况时,给它加上括号,这样既能增加可读性,又能避免可能出现的不必要错误。

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

88阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

86阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

78阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读