黑马程序员技术交流社区

标题: 条件运算符的运算顺序 [打印本页]

作者: hughwang90    时间: 2014-4-11 19:43
标题: 条件运算符的运算顺序
本帖最后由 hughwang90 于 2014-4-13 14:04 编辑

请问:
          条件运算符  e1 ? e2 : e3 ? e4 : e5  的运算顺序是 (e1 ? e2 : e3)? e4 : e5 还是e1 ? e2 : ( e3 ? e4 : e5)   


作者: 一只小菜鸟    时间: 2014-4-11 20:22
int x=0? 3 : 1? 9:4;
输出x=9;
int x=1? 3 : 1? 9:4;
输出x=3;
所以应该是int x=e1?(e2) :  (e3?e4:e5)
->当e1=0时,执行后面的e3?e4:e5,再根据e3判断x的值
->当e1=1时,X的值=e2;
作者: 微尘•逐梦    时间: 2014-4-11 20:25
e1 ? e2 : ( e3 ? e4 : e5)
作者: 星河鹭起    时间: 2014-4-11 23:41
int x = e1 ? e2 : e3 ? e4 : e5  

我的看法是首先判断e1是否为真,如果e1为真,则x=e2,后面的不再进行运算:
   如果e1为假,则x=e3,然后再判断e3是否为真,
   如果e3为真,e4就覆盖e3,x=e4,如果e3为假,则e5覆盖e3,x=e5;
作者: 从┧靇┟开始    时间: 2014-4-12 00:09
我查了一下运算符的优先级,发现?:属于条件运算符,是从右往左的匹配规则。
换句话说就是遇到了就从右向左算,e1 ? e2 : e3 ? e4 : e5    从右往左套用
(e3?e4:e5)先运算 假设为a,现在变成e1?e2:a,继续从右往左套用,结束。
我新手 不知道这样说法对不对  给个建议呀:)
作者: 星河鹭起    时间: 2014-4-12 13:23
从┧靇┟开始 发表于 2014-4-12 00:09
我查了一下运算符的优先级,发现?:属于条件运算符,是从右往左的匹配规则。
换句话说就是遇到了就从右向 ...

条件运算优先级小于算术运算,而 x=e1 是算术运算,所以先运行x=e1,然后再进行判断




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2