关于C语言的问题 大家帮个忙!
#definePRINTT(a,b,c)\printf("a=%d\tb=%d\tc=%d\n",a,b,c);main(){inta,b,c;a=b=c=2;++a||...
# define PRINTT(a,b,c)\
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
main()
{
int a,b,c;
a=b=c=2;
++a||++b&&++c;PRINTT(a,b,c);
getch();
}
上面的是代码 结果是输出3 2 2
请问为什么是3 2 2
这里面不是有优先级吗 为什么是先求++后再|| 面不是先++再求&& 与的优先级不是大于或吗 展开
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
main()
{
int a,b,c;
a=b=c=2;
++a||++b&&++c;PRINTT(a,b,c);
getch();
}
上面的是代码 结果是输出3 2 2
请问为什么是3 2 2
这里面不是有优先级吗 为什么是先求++后再|| 面不是先++再求&& 与的优先级不是大于或吗 展开
5个回答
展开全部
这是C里面为了节约时间的做法,因为或运算是只要两者中有一个为真,那整个式子就为正,举个简单的例子,
a=b=2;
++a||++b;
编译器先看看或左边的式子,++a,计算后是3,非零为正,好的,不管另一个数怎么样,这个式子肯定是为真的了,所以直接跳过,不去计算。
所以,这时候输出的是3 2。
如果++a的结果为0,那编译器会再计算++b。
同样,放在&&上面也是一样的,如果第一个式子为0,那表示整个表达式的结果为0,编译器同样不会去计算后面的式子。
a=b=2;
++a||++b;
编译器先看看或左边的式子,++a,计算后是3,非零为正,好的,不管另一个数怎么样,这个式子肯定是为真的了,所以直接跳过,不去计算。
所以,这时候输出的是3 2。
如果++a的结果为0,那编译器会再计算++b。
同样,放在&&上面也是一样的,如果第一个式子为0,那表示整个表达式的结果为0,编译器同样不会去计算后面的式子。
展开全部
计算机有个毛病(爱偷懒),举个例子:
int a=2;
3||a++;
a=?
本来是“||”运算符左右两边都得计算,只要有一个为真就是真,但是,它偷懒,一看到左边为真,它就不管右边了。因为它知道,这样做“||”的结果错不了。可是,我们要的是右边的值。
你的疑惑就是它偷懒造成的。
int a=2;
3||a++;
a=?
本来是“||”运算符左右两边都得计算,只要有一个为真就是真,但是,它偷懒,一看到左边为真,它就不管右边了。因为它知道,这样做“||”的结果错不了。可是,我们要的是右边的值。
你的疑惑就是它偷懒造成的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(++a)||(++b&&++c)
先(++a)
||是前面为真,就不执行后面的语句
先(++a)
||是前面为真,就不执行后面的语句
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为关系运算符的运算规则从左向右,发现永真或永假条件时立即返回表达式的值,不再另外计算后面的表达式,故++a执行后,a变为3,逻辑中为真。所以||不再判断后面的表达式直接返回真值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
优先级一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询