当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

C语言运算符优先级问题

更新:12-22 整理:39baobao.com
字体:

[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...