C语言运算符优先级问题

inta=1;intb=!a&&++a;b的值是0,但是a的值为什么还是1啊?++a后是a为2呀?根据优先级,!>++>&&所以先算!a,再算++a;再算&&C语言表达式... int a=1;
int b= !a&&++a;

b的值是0,但是a的值为什么还是1啊?++a后是a为2呀?
根据优先级, !> ++ > &&
所以 先算 !a ,再算 ++a; 再算 &&
C语言表达式是根据符号优先级来确定先算哪个吗?

优先级!> ++ > &&
所以 先算 !a ,再算 ++a; 再算 && 不对吗?
展开
 我来答
匿名用户
2009-02-25
展开全部
注意一下&&这个运算符

这个运算符有如下两个特点:
1.该运算符是左结合的(也就是说运算步骤是从左向右进行)
2.一旦当该运算符的左边的表达式的值为假(值为0)时,就认为整个&&表达式的值为假(0),不继续进行&&右边的表达式的运算了

所以int b= !a&&++a;
先运算!a,发现!a等于0,表达式为假,所以直接将0赋值给b,不再计算右边的++a了

===========================================================
问题补充:C语言表达式是根据符号优先级来确定先算哪个吗?

优先级!> ++ > &&
所以 先算 !a ,再算 ++a; 再算 && 不对吗?
===========================================================
你列的优先级是对的,
但是注意一点:
一旦当&&运算符的左边的表达式的值为假(值为0)时,就认为整个&&表达式的值为假(0),不继续进行&&右边的表达式的运算了。

也就是说,先运算!a,发现为假,随后编译器发现后面有&&运算,所以直接就不判断后面的表达式了。
如果!a为真,随后编译器发现后面有&&运算,还会继续进行后面的表达式的计算,
而且是等表达式计算完毕后,再判断&&的结果,
所以和你的优先级的疑问是不冲突的
精品建筑电气
2009-02-25 · 主要涉及建筑电气、电气自动化、电气节能。
精品建筑电气
采纳数:78 获赞数:392

向TA提问 私信TA
展开全部
嘿嘿!我给你解释哈
这个是&&的缘故,m&&n,当m=0是“形成短路”,意思就是不再执行n,在你的题目里面就是不再执行++a啦!
与此相同的还有||,m||n,当m的值为真时,后面的n也形成短路,也就是不再执行后面的n操作啦!
明白了吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式