关于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
这里面不是有优先级吗 为什么是先求++后再|| 面不是先++再求&& 与的优先级不是大于或吗
展开
 我来答
老猿小郭
2010-01-28 · TA获得超过2763个赞
知道小有建树答主
回答量:315
采纳率:0%
帮助的人:578万
展开全部
这是C里面为了节约时间的做法,因为或运算是只要两者中有一个为真,那整个式子就为正,举个简单的例子,
a=b=2;
++a||++b;
编译器先看看或左边的式子,++a,计算后是3,非零为正,好的,不管另一个数怎么样,这个式子肯定是为真的了,所以直接跳过,不去计算。
所以,这时候输出的是3 2。
如果++a的结果为0,那编译器会再计算++b。
同样,放在&&上面也是一样的,如果第一个式子为0,那表示整个表达式的结果为0,编译器同样不会去计算后面的式子。
网络学习师
2010-01-29
知道答主
回答量:30
采纳率:0%
帮助的人:0
展开全部
计算机有个毛病(爱偷懒),举个例子:
int a=2;
3||a++;
a=?
本来是“||”运算符左右两边都得计算,只要有一个为真就是真,但是,它偷懒,一看到左边为真,它就不管右边了。因为它知道,这样做“||”的结果错不了。可是,我们要的是右边的值。
你的疑惑就是它偷懒造成的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zgf1231
2010-01-28 · 超过22用户采纳过TA的回答
知道答主
回答量:78
采纳率:0%
帮助的人:0
展开全部
(++a)||(++b&&++c)
先(++a)
||是前面为真,就不执行后面的语句
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Atlantis_T
2010-01-28
知道答主
回答量:41
采纳率:0%
帮助的人:11.6万
展开全部
因为关系运算符的运算规则从左向右,发现永真或永假条件时立即返回表达式的值,不再另外计算后面的表达式,故++a执行后,a变为3,逻辑中为真。所以||不再判断后面的表达式直接返回真值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kylemick
2010-01-28 · TA获得超过609个赞
知道小有建树答主
回答量:755
采纳率:0%
帮助的人:401万
展开全部
优先级一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式