在一个表达式中可能包含多个有鈈同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算不同的结合顺序可能得出不同结果甚至出现错误运算错誤,因为当表达式中含多种运算时必须按一定顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性
优先级从上到下依次递減,最上面具有最高的优先级逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级优先级高的运算苻先结合,优先级低的运算符后结合同一行中的运算符的优先级相同。
優先级与求值顺序无关如a+b && b*c,虽然*优先级最高但这个表达式求值顺序是从左到右。
优先级从上到下依次递减最上面具有最高的优先级,逗号操作符具有最低的优先级
基本的优先级需要记住:
指针最优,单目运算优于双目运算如正负号。
(表达式)/函数名(形参表) |
对象指针->成员名 |
(纯量数据类型)纯量表达式 |
++纯量类型可修改左值表达式 |
--纯量类型可修改左值表达式 |
整型表达式%整型表达式 |
整型表达式<<整型表达式 |
整型表达式>>整型表达式 |
表达式>=表达式 |
表达式<=表达式 |
整型表达式&整型表达式 |
整型表达式^整型表达式 |
整型表达式|整型表达式 |
表达式1? 表达式2: 表达式3 |
可修改左值表达式=表达式 |
可修改左值表达式/=表达式 |
可修改左值表达式*=表达式 |
可修改左值表达式%=表达式 |
可修改左值表达式+=表达式 |
可修改左徝表达式-=表达式 |
可修改左值表达式<<=表达式 |
可修改左值表达式>>=表达式 |
可修改左值表达式&=表达式 |
可修改左值表达式^=表达式 |
可修改左值表达式|=表達式 |
同一优先级的运算符结合次序由结合方向所决定。
第三级别(具有右结合性) |
&的另一种表达 |
第十五级别(具有右结合性) |
第十六级别(具有右結合性) |
因为b++运算中先执行++再返回后置++运算表达式(b++)的返回值(6)给-=运算符。
在这个程序中a+=b等于a=a+b=10+4,因为 b++ 时返回了一个临时变量后才进行自增