一道C语言条件运算符运算顺序问题

已知a=1,b=2,c=3,d=4;执行表达式a<b?a:(d>c)?b=100:c后b的值是多少?请教各位大侠!!!呃。。我的主要疑问是,赋值运算符的结合方向不是自右向... 已知a=1,b=2,c=3,d=4;执行表达式a<b?a:(d>c)?b=100:c后b的值是多少?
请教各位大侠!!!
呃。。我的主要疑问是,赋值运算符的结合方向不是自右向左吗,为什么不先进行右面的(d>c)?b=100:c呢?这样算下来就是100了。。
展开
 我来答
aven_yang
2012-05-02 · TA获得超过719个赞
知道小有建树答主
回答量:350
采纳率:100%
帮助的人:337万
展开全部
b最后的值为2. 分析如下:
先判断表达式a<b? 这时为真,所以直接执行表达式a, 而后面的就被忽略掉了。
所以这时b依然是2.
追问
可是赋值运算符的结合方向不是自右向左吗,为什么不先进行右面的(d>c)?b=100:c呢?
追答
这涉及到C语言中的优先级、结合性、求值顺序。
对于?:,在C中与它优先级相同的只有它自己,因此只有连续的?:才会体现出它的右结合性,即a?b:c?d:e中,根据右结合性可知应理解为a?b:(c?d:e)。但是,还涉及到一个求值顺序的问题,a?b:c中,C语言规定先对a求值,非零则对b求值并作为该表达式的值,为零则对c求值并作为表达式的值,并且b和c中有且仅有一个会被求值。因此对于题目ac)?b=100:c,就像我以上的分析一样了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
淦海瑶s1
2012-05-02 · TA获得超过3646个赞
知道大有可为答主
回答量:3341
采纳率:100%
帮助的人:906万
展开全部
应该是2吧
执行a<b后,那么执行后面的a,也就是冒号前面的预计,后面的就不执行了,所以b的值没有变
追问
嗯,答案也是这么说的,可是为什么不先进行右面的(d>c)?b=100:c呢?O(∩_∩)O~麻烦大侠指点
追答
这就是顺序执行的事情,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zeken3079
2012-05-02
知道答主
回答量:45
采纳率:0%
帮助的人:7.7万
展开全部
4吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Tidus_forever
2012-05-02 · TA获得超过4401个赞
知道大有可为答主
回答量:2782
采纳率:100%
帮助的人:2000万
展开全部
2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kingfeng588
2012-05-02 · TA获得超过2494个赞
知道大有可为答主
回答量:1475
采纳率:50%
帮助的人:1931万
展开全部
1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式