黑马程序员技术交流社区

标题: 一道C语言条件运算符运算顺序问题 [打印本页]

作者: 胡铭    时间: 2014-4-26 13:00
标题: 一道C语言条件运算符运算顺序问题
本帖最后由 胡铭 于 2014-4-27 16:43 编辑

已知a=1,b=2,c=3,d=4;执行表达式a<b?a : (d>c)?b=100:c后b的值是多少?
作者: 兰闻天    时间: 2014-4-26 13:28
本帖最后由 兰闻天 于 2014-4-26 13:30 编辑

b =2 ,你可以自己去运行一下,这个是a<b为真,执行的是a,再冒号后面的都不执行了。如果改成a>b,那会执行(d>c)?b=100:c,判断d>c真假,真执行b=100,假执行c;
作者: ios_fce    时间: 2014-4-26 13:34
这个程序运行不了!!!
作者: Invoker    时间: 2014-4-26 13:38
这个语句是从左到右进行判断的,首先判断A<B 这个为真 只执行a 后面不做判断
作者: stevenzhao1977    时间: 2014-4-26 13:47
b=2;
我的理解是a<b 成立,执行 : 之前的表达式。
但是 书上讲 三木运算符是从右至左结合。==》 盼高手解惑
作者: m573555543    时间: 2014-4-26 20:13
这道题出错了   。


1.先要弄清楚关系运算<的优先级比? :运算的优先级高。

2.要知道?:运算符的结合性是右结合。即:自右向左算。



备注: 运算符的优先顺序:
一共有十五个优先级: 1   ()  []  .  ->2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof          从右至左  
3   * / % 4   + - 5   >> <<  6   > >= < <= 7   == !=   8   &  9   ^   10  |   11  &&12  ||13  ?:    从右至左   14   =  +=  -=  *=  /=   %=  |=   ^=   &=   >>=   <<=      从右至左   15  ,就着多吧   结合性:2   13  14  是从右至左   其他都是  从左至右


作者: 夏应斌    时间: 2014-4-26 20:16
这个b就是等于2,就是已知中赋值,先执行a<b,如果条件成立,直接返回a的值;如果不成立则接着向右进行,一直输出数值为止,b=100或者是3,
作者: 251638256    时间: 2014-4-26 20:21
前面的已经满足了 嵌套里面的三元表达式不会指向

so b = 2




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