C语言逻辑运算 优先级问题? 5

#include<stdio.h>main(){inta=0,b=0,c=0,d;d=a&&++b||++c;//&&运算符,若前者不正确,后者不执行。printf("a... #include<stdio.h>
main()
{
int a=0,b=0,c=0,d;
d= a && ++b || ++c; // &&运算符,若前者不正确,后者不执行。
printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);

int x=1,y=0,z=0,w;
w=x || ++y && ++z; // ||运算符,若前者正确,后者不执行
printf("x=%d,y=%d,z=%d,w=%d\n",x,y,z,w);
}
结果:
a=0,b=0,c=1,d=1
x=1,y=0,z=0,w=1
为什么z=0不等于1?如果z=0的话,为什么w等于1
展开
 我来答
童之新
2020-03-19 · TA获得超过228个赞
知道小有建树答主
回答量:289
采纳率:60%
帮助的人:80.2万
展开全部
d= a && ++b || ++c;
按照运算符优先级先&&在||,所以先a && ++b,在|| ++c
a=0所以a&&++b的结果就已经出来了,为0,++b就不用算,在然后在判断++c,所以a=0,b=0,c=1,d=1

w=x || ++y && ++z;中++y&&++z优先级高,他们的计算结果将与x在进行或运算,但x为1,所以这个或运算右边的式子已经没有算的必要了,他们的结果一定为1,即w=1
庄政警
2020-03-19 · TA获得超过9916个赞
知道大有可为答主
回答量:1113
采纳率:94%
帮助的人:862万
展开全部
w=x || ++y && ++z;
因为&&优先于||, 所以x || ++y && ++z就是x || (++y && ++z),总体上看就是个或表达式,x==1,那么整个表达式就必然为真,于是(++y && ++z)就被忽略
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
甲修影一号
2020-03-19 · 超过28用户采纳过TA的回答
知道答主
回答量:73
采纳率:84%
帮助的人:9万
展开全部
w=x||++y&&++z时,因为w=x可以成立,所以执行w=x,则w=1;

而||是逻辑或,前者正确,后者不执行,所以++y&&++z不执行,因此z还是你最初定义的z=0
本人也是编程小白,若有错误请见谅。
若有帮助请采纳。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8b58de0
2020-03-19 · TA获得超过945个赞
知道小有建树答主
回答量:1079
采纳率:83%
帮助的人:313万
展开全部
因为x=1,x是大于0的,所以||符号前面是成立的,那么||后面的运算和判断都不执行,直接把逻辑值1赋值给w,所以w=1,后面的++y和++z都不执行,都为0。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
种朵苟慧丽
2020-03-20 · TA获得超过3665个赞
知道大有可为答主
回答量:3121
采纳率:24%
帮助的人:448万
展开全部
你是说为什么先执行++a吧?其实C程序除了符号优先级还有一种叫求值顺序,例如a||b,那么电脑会先对a求值,如果a是真,那么电脑就不会再理会b的内容了并返回逻辑值1.如果a的结果为假则电脑才会对b进行求值。本题电脑先求出++a是2,所以结果是真,电脑不再理会||右边的数据,直接返回逻辑值1(真)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式