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; 再算 && 不对吗? 展开
int b= !a&&++a;
b的值是0,但是a的值为什么还是1啊?++a后是a为2呀?
根据优先级, !> ++ > &&
所以 先算 !a ,再算 ++a; 再算 &&
C语言表达式是根据符号优先级来确定先算哪个吗?
优先级!> ++ > &&
所以 先算 !a ,再算 ++a; 再算 && 不对吗? 展开
2个回答
2009-02-25
展开全部
注意一下&&这个运算符
这个运算符有如下两个特点:
1.该运算符是左结合的(也就是说运算步骤是从左向右进行)
2.一旦当该运算符的左边的表达式的值为假(值为0)时,就认为整个&&表达式的值为假(0),不继续进行&&右边的表达式的运算了
所以int b= !a&&++a;
先运算!a,发现!a等于0,表达式为假,所以直接将0赋值给b,不再计算右边的++a了
===========================================================
问题补充:C语言表达式是根据符号优先级来确定先算哪个吗?
优先级!> ++ > &&
所以 先算 !a ,再算 ++a; 再算 && 不对吗?
===========================================================
你列的优先级是对的,
但是注意一点:
一旦当&&运算符的左边的表达式的值为假(值为0)时,就认为整个&&表达式的值为假(0),不继续进行&&右边的表达式的运算了。
也就是说,先运算!a,发现为假,随后编译器发现后面有&&运算,所以直接就不判断后面的表达式了。
如果!a为真,随后编译器发现后面有&&运算,还会继续进行后面的表达式的计算,
而且是等表达式计算完毕后,再判断&&的结果,
所以和你的优先级的疑问是不冲突的
这个运算符有如下两个特点:
1.该运算符是左结合的(也就是说运算步骤是从左向右进行)
2.一旦当该运算符的左边的表达式的值为假(值为0)时,就认为整个&&表达式的值为假(0),不继续进行&&右边的表达式的运算了
所以int b= !a&&++a;
先运算!a,发现!a等于0,表达式为假,所以直接将0赋值给b,不再计算右边的++a了
===========================================================
问题补充:C语言表达式是根据符号优先级来确定先算哪个吗?
优先级!> ++ > &&
所以 先算 !a ,再算 ++a; 再算 && 不对吗?
===========================================================
你列的优先级是对的,
但是注意一点:
一旦当&&运算符的左边的表达式的值为假(值为0)时,就认为整个&&表达式的值为假(0),不继续进行&&右边的表达式的运算了。
也就是说,先运算!a,发现为假,随后编译器发现后面有&&运算,所以直接就不判断后面的表达式了。
如果!a为真,随后编译器发现后面有&&运算,还会继续进行后面的表达式的计算,
而且是等表达式计算完毕后,再判断&&的结果,
所以和你的优先级的疑问是不冲突的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询