
一道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了。。 展开
请教各位大侠!!!
呃。。我的主要疑问是,赋值运算符的结合方向不是自右向左吗,为什么不先进行右面的(d>c)?b=100:c呢?这样算下来就是100了。。 展开
展开全部
b最后的值为2. 分析如下:
先判断表达式a<b? 这时为真,所以直接执行表达式a, 而后面的就被忽略掉了。
所以这时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,就像我以上的分析一样了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该是2吧
执行a<b后,那么执行后面的a,也就是冒号前面的预计,后面的就不执行了,所以b的值没有变
执行a<b后,那么执行后面的a,也就是冒号前面的预计,后面的就不执行了,所以b的值没有变
追问
嗯,答案也是这么说的,可是为什么不先进行右面的(d>c)?b=100:c呢?O(∩_∩)O~麻烦大侠指点
追答
这就是顺序执行的事情,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
2
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询