C语言关于||和&&的问题。
#include<stdio.h>voidmain(){inta,b,c,w=1,x=2,y=3,z=4,d=5,e=6;a=b=c=1;++a||++b&&++c;(d...
#include<stdio.h>
void main()
{ int a,b,c,w=1,x=2,y=3,z=4,d=5,e=6;
a=b=c=1;
++a||++b&&++c;
(d=w>x)&&(e=y>z);
printf("a=%d,b=%d,c=%d,d=%d,e=%d",a,b,c,d,e);
}
测试出来a为2.b=c=1.
但是++a||++b&&++c; ||的优先级不是比&&低吗?
那么可以看成++a||(++b&&++c).
显然括号优先级又大于||。。。怎么b.c还是等于1呢。。 展开
void main()
{ int a,b,c,w=1,x=2,y=3,z=4,d=5,e=6;
a=b=c=1;
++a||++b&&++c;
(d=w>x)&&(e=y>z);
printf("a=%d,b=%d,c=%d,d=%d,e=%d",a,b,c,d,e);
}
测试出来a为2.b=c=1.
但是++a||++b&&++c; ||的优先级不是比&&低吗?
那么可以看成++a||(++b&&++c).
显然括号优先级又大于||。。。怎么b.c还是等于1呢。。 展开
3个回答
展开全部
&& 和 || 有短路效应
就是
(++b&&++c). 当++b==0时 ++c就不用判断了所以 &&运算短路 ++c没有执行
当++a||(++b&&++c). 当++a 非0 ||运算短路 (++b&&++c).无需运算被跳过
所以结论 只有++a被执行
其余运算被跳过
就是
(++b&&++c). 当++b==0时 ++c就不用判断了所以 &&运算短路 ++c没有执行
当++a||(++b&&++c). 当++a 非0 ||运算短路 (++b&&++c).无需运算被跳过
所以结论 只有++a被执行
其余运算被跳过
追问
是啊。。
但是括号优先级比||高。。
难道不是先算括号吗。。
追答
是&&的优先级高
但短路的优先级更高
编译器会从最外层(正好是跟运算优先级反着的)也就是最后运算的那个表达式开始判断短路 如果最外层短路了
里面优先级再高都不会运算
2012-09-24
展开全部
||的优先级和&&的优先级是一样的,就像数学上的“+”和“-”一样 。我试过了,运行结果为:a=2,b=1,c=1,d=0,e=6 Press any key to continue.原因如下:首先说++a||++b&&++c;——逻辑或是一真即真,++a可执行,即为真,后面的就不用执行了(也就是|++b&&++c不执行),所以b=1,c=1;同理,语句(d=w>x)&&(e=y>z);中,逻辑与(&&)的运算法则是一假即假,(d=w>x)的结果是0,为假,所以&&后面的也不用算了,d=0,e=6(没变)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该没有优先吧,一直没有注意!!看看书!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询