C语言逻辑表达式问题

intp=-1,q=-1,r=-1,t;t=(p++)&&(--q)&&(r--)||(--p);可以讲解下这个吗... int p=-1,q=-1,r=-1,t;
t=(p++)&&(--q)&&(r--)||(--p);
可以讲解下这个吗
展开
 我来答
ronhou
2012-08-06 · TA获得超过453个赞
知道小有建树答主
回答量:180
采纳率:0%
帮助的人:146万
展开全部
优先级&&高于||
因此||将整个表达式分成了 (p++)&&(--q)&&(r--) 和 (--p) 两部分;
再从左至右的顺序,因为p++ 是先用p的值,然后自增,p为-1为true(非0即为真),继续判断第一个&&后面的 --q ;q先自减1,变成-2,再判断为true,然后再判断下一个&&后面的 r--;类似上面的p++,因为r为-1也是为真,|| 的左边这块因为全部判定为真了,所以不用判断右边了,也就是说不会考虑右边的表达式了,即使有再多的运算。
输出p,q,r,t的值分别为0,-2,-2,1

你可以试着进行这样的改动:
Sample 1:
p=-1,q=-1,r=-1,t;
t=(++p)&&(--q)&&(r--)||(--p);
输出p,q,r,t的值分别为-1,-1,-1,1
Sample 2:
p=-1,q=1,r=-1,t;
t=(p++)&&(--q)&&(r--)||(--p);
输出p,q,r,t的值分别为-1,0,-1,1
Sample 3:
p=-1,q=-1,r=-1,t;
t=(p++)&&(--q)&&(++r)||(--p);
输出p,q,r,t的值分别为-1,-2,0,1

希望没有啥错误。。。
来自:求助得到的回答
百度网友1cf58ab
2012-08-06 · TA获得超过343个赞
知道小有建树答主
回答量:276
采纳率:50%
帮助的人:363万
展开全部
对于 t=(p++)&&(--q)&&(r--)||(--p); 先对表达式进行扫描,++ -- 运算符是从右向左结合,--p等于-2,r--在本式中使用r未自增前的值 -1,--q等于-2,p++在本式中使用p未自增前的值 -2,因此:
t=(-2)&&(-2)&&(-1)||(-2)=1;
逻辑运算符只要两边的值不等于0,值为真。从左到右全真,结果为真,所以t=1;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
龙之4
2012-08-06 · 超过14用户采纳过TA的回答
知道答主
回答量:111
采纳率:0%
帮助的人:39.9万
展开全部
第一行不用多说;
第二行是个逻辑表达式。
在逻辑表达式中只有“0"和"非0"这两个值,而非0输出时用1表示。
p++=0;--q=-2即非0也就用1表示;r--=-1即1;--p=-2即1。
第二行即为:t=0&&1&&1||1;(PS:我只是为了你好看才这么写,编程时不能这么写)。
最后t=1.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-08-06
展开全部
告诉你方法,你自己就会了
括号的优先级最高,&&高于||,“=”的优先级低
P++ 先使用后加1
++p 先加1后使用 。。。类比其他的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式