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 展开
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 展开
5个回答
展开全部
w=x || ++y && ++z;
因为&&优先于||, 所以x || ++y && ++z就是x || (++y && ++z),总体上看就是个或表达式,x==1,那么整个表达式就必然为真,于是(++y && ++z)就被忽略
因为&&优先于||, 所以x || ++y && ++z就是x || (++y && ++z),总体上看就是个或表达式,x==1,那么整个表达式就必然为真,于是(++y && ++z)就被忽略
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
w=x||++y&&++z时,因为w=x可以成立,所以执行w=x,则w=1;
而||是逻辑或,前者正确,后者不执行,所以++y&&++z不执行,因此z还是你最初定义的z=0
本人也是编程小白,若有错误请见谅。
若有帮助请采纳。
而||是逻辑或,前者正确,后者不执行,所以++y&&++z不执行,因此z还是你最初定义的z=0
本人也是编程小白,若有错误请见谅。
若有帮助请采纳。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为x=1,x是大于0的,所以||符号前面是成立的,那么||后面的运算和判断都不执行,直接把逻辑值1赋值给w,所以w=1,后面的++y和++z都不执行,都为0。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是说为什么先执行++a吧?其实C程序除了符号优先级还有一种叫求值顺序,例如a||b,那么电脑会先对a求值,如果a是真,那么电脑就不会再理会b的内容了并返回逻辑值1.如果a的结果为假则电脑才会对b进行求值。本题电脑先求出++a是2,所以结果是真,电脑不再理会||右边的数据,直接返回逻辑值1(真)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询