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);
可以讲解下这个吗 展开
t=(p++)&&(--q)&&(r--)||(--p);
可以讲解下这个吗 展开
4个回答
展开全部
优先级&&高于||
因此||将整个表达式分成了 (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
希望没有啥错误。。。
因此||将整个表达式分成了 (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
希望没有啥错误。。。
来自:求助得到的回答
展开全部
对于 t=(p++)&&(--q)&&(r--)||(--p); 先对表达式进行扫描,++ -- 运算符是从右向左结合,--p等于-2,r--在本式中使用r未自增前的值 -1,--q等于-2,p++在本式中使用p未自增前的值 -2,因此:
t=(-2)&&(-2)&&(-1)||(-2)=1;
逻辑运算符只要两边的值不等于0,值为真。从左到右全真,结果为真,所以t=1;
t=(-2)&&(-2)&&(-1)||(-2)=1;
逻辑运算符只要两边的值不等于0,值为真。从左到右全真,结果为真,所以t=1;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一行不用多说;
第二行是个逻辑表达式。
在逻辑表达式中只有“0"和"非0"这两个值,而非0输出时用1表示。
p++=0;--q=-2即非0也就用1表示;r--=-1即1;--p=-2即1。
第二行即为:t=0&&1&&1||1;(PS:我只是为了你好看才这么写,编程时不能这么写)。
最后t=1.
第二行是个逻辑表达式。
在逻辑表达式中只有“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后使用 。。。类比其他的
括号的优先级最高,&&高于||,“=”的优先级低
P++ 先使用后加1
++p 先加1后使用 。。。类比其他的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询