C语言逻辑语言运算顺序

有这样一个问题:inta=1,b=2,c=3,d=4,m=5,n=6;a=(m=a>b)&&(n=c>d)||++a==b--;要求输出a,b,m,n的值?另外再问一下在... 有这样一个问题:
int a=1,b=2,c=3,d=4,m=5,n=6;
a=(m=a>b)&&(n=c>d)||++a==b--;
要求输出a,b,m,n的值?
另外再问一下在哪些情况下逻辑语句不用每条都完全运算出来?
谢谢各位!
展开
 我来答
missile80000
2010-09-29 · TA获得超过801个赞
知道小有建树答主
回答量:135
采纳率:0%
帮助的人:83.7万
展开全部
a=(m=a>b)&&(n=c>d)||++a==b--;
首先是
m=a>b,a>b为假,所以m=0.

&&是有一个是0就是假,||是有一个为1就为1,
所以不短路的条件都看运算符前的,
如果&&前是0,不运算后面,结果必为0;
如果||前是1,不运算后面,结果必为1。

所以(m=a>b)&&(n=c>d)前面的是0,所以必为假,因此)(n=c>d)就不用看了,也不计算,n的结果也没改变,还是6。(m=a>b)&&(n=c>d)结果就是0.
变成 0 ||++a==b--;
所以要看后面的,a,b之前值没改,所以++a是2,b--是先赋值后减,所以赋值时还是2.
所以++a==b-- 结果是1.然后赋值给a,因此a=1,b因为前面自减,所以赋值2自减的结果是1,所以b=1。

结果 1 1 0 6

满意就采取最佳答案吧!
百度网友9cbba519c3
2010-09-29 · TA获得超过768个赞
知道小有建树答主
回答量:200
采纳率:0%
帮助的人:173万
展开全部
a=2,b=1,m=5,n=6;
(m=a>b)&&(n=c>d)||++a==b--;这个表达式可是(m=a>b)&&(n=c>d)结合,可以看成一个整体,于是乎这个表达式就是p||q的情况,应先看q部分而q就是++a==b--;
经过判断可知这句话是真的,所以整个表达式(m=a>b)&&(n=c>d)||++a==b--;
就是真的,p部分不需要判断了,除了a和b之外其他值都不变!!!

运算规则:
a&&b:如果a为假,整个表达式就是假,就不执行b了,
a||b如果a为真整个表达式就是真,就不在执行b了
只要记住这两句话,任何此类的题都会做了,但是要多加练习!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
月冬川9132
2012-03-13 · TA获得超过6万个赞
知道大有可为答主
回答量:3.6万
采纳率:0%
帮助的人:4695万
展开全部
1 1 0 6
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式