设int a=5,b=6,表达式(++a==b--)?++a:--b的值是

如题所述

结果为7。

条件表达式为:表达式1?表达式2:表达式3。先求解表达式1,若其值为真(非0)则将表达式2的值作为整个表达式的取值,否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。

先判断++a==b--是否为真,++a表达的值为6,b--表达的值为6,两者相等,为真。则将表达式++a的值作为整个表达式的取值,因为在此之前a的值已经自增变成6,再进行++a表达式的值为7。

扩展资料:

1、优先级

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

例如:

⑴ m<n ? x : a+3

等价于:(m<n) ?(x) :(a+3)

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

等价于:(a++>=10 && b-->20) ? a : b

2、结合性

条件运算符具有右结合性

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

例如:

w<x ? x+w : x<y ? x : y

与 w<x ? x+w : ( x<y ? x : y) 等价

与 (w<x ? x+w : x<y) ? x : y 不等价

参考资料:

百度百科-条件运算符

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-27
最後值为7,这是一个if语句,就是
int a=5,b=6;
if(++a==b--) ++a;
else --b;

++ar的规则是先运算,所以括号中左值++a=6,a=6;
==的优先级低过--,所以先计算b--
b--的规则是先赋值,所以括号中右值b--=6,b=5;
左值6==右值6,即条件为真,执行++a,因为a值已是6, 所以加1操作後,
结果为 7追问

左等于6,右等于5,怎么会相等?

追答

最後值为7,这是一个if语句,就是
原程序等價:
int a=5,b=6;
if(++a==b--) ++a;
else --b;

++a的规则是先运算++a=6,所以括号中左值,a=6;
==的优先级低过--,所以先计算b--
b--的规则是先赋值b--=6,所以括号中右值,b=5;
左值6==右值6,即条件为真,
执行++a,因为a=6, 所以工a+1=7,
结果为 7

本回答被提问者和网友采纳
第2个回答  2011-08-24
7,条件表达式条件为真,取值为++a;原来为6,执行++a后为7