[c语言中所有符号的优先级别]c语言运算符号 1级优先级 左结合 () 圆括号 [] 下标运算符 ->指向结构体成员运算符 . 结构体成员运算符 2级优先级 右结合 ! 逻辑非运算符 ~ 按位取反运算符 ++ 自增运算符 --...+阅读
注意一下&这个运算符
这个运算符有如下两个特点:
1.该运算符是左结合的(也就是说运算步骤是从左向右进行)
2.一旦当该运算符的左边的表达式的值为假(值为0)时,就认为整个&表达式的值为假(0),不继续进行&右边的表达式的运算了
所以int b= !a&++a;
先运算!a,发现!a等于0,表达式为假,所以直接将0赋值给b,不再计算右边的++a了
===========================================================
问题补充:C语言表达式是根据符号优先级来确定先算哪个吗?
优先级!> ++ > &
所以 先算 !a ,再算 ++a; 再算 & 不对吗?
===========================================================
你列的优先级是对的,
但是注意一点:
一旦当&运算符的左边的表达式的值为假(值为0)时,就认为整个&表达式的值为假(0),不继续进行&右边的表达式的运算了。
也就是说,先运算!a,发现为假,随后编译器发现后面有&运算,所以直接就不判断后面的表达式了。
如果!a为真,随后编译器发现后面有&运算,还会继续进行后面的表达式的计算,
而且是等表达式计算完毕后,再判断&的结果,
所以和你的优先级的疑问是不冲突的
本文地址:https://www.39baobao.com/show/29_12910.html
以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.
以下为关联文档:
C语言中关于运算符的优先级问题请进left to right 优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。 所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符,因此使 a = b...