📜  C中的运算符优先级和关联性(1)

📅  最后修改于: 2023-12-03 15:14:25.392000             🧑  作者: Mango

C中的运算符优先级和关联性

在C语言中,存在不同优先级的运算符,它们的执行顺序是由其优先级和关联性决定的。程序员应该了解这些规则,以避免出现代码逻辑错误。

优先级

下表列出C语言运算符按照优先级从高到低的顺序:

|优先级|运算符|说明| |-|-|-| |1|()|圆括号| |2|! ~ ++ -- + - * & sizeof|一元运算符| |3|* / %|乘、除、取余| |4|+ -|加、减| |5|<< >>|左移、右移| |6|< <= > >=|小于、小于等于、大于、大于等于| |7|== !=|等于、不等于| |8|&|按位与| |9|^|按位异或| |10|||按位或| |11|&&|逻辑与| |12||||逻辑或| |13|?:|条件| |14|= += -= *= /= %= &= ^= <<= >>=|赋值| |15|,|逗号|

优先级高的运算符先执行,优先级相同的从左到右执行。例如,表达式2 + 3 * 4会先计算3 * 4,再加上2,结果为14

圆括号

圆括号是优先级最高的运算符。在表达式中,任何出现在圆括号内的运算都会先于其它运算执行。例如,(2 + 3) * 4结果为20

一元运算符

一元运算符有!(逻辑非)、~(按位取反)、++(自增)、--(自减)、+(正数)、-(负数)、*(指针值)、&(获取地址)、sizeof(计算大小)等。它们的优先级次于圆括号,但优先级相同的从右到左执行。

二元运算符

二元运算符分为算术运算符、关系运算符、逻辑运算符、按位运算符、赋值运算符、条件运算符等。它们的优先级和关联性有明确的规定。

关联性

C语言中,有些运算符的优先级相同,但是它们的执行顺序是由它们的关联性决定的。

例如,赋值运算符=的关联性是右结合的,因此表达式a = b = c的结果是将c赋值给b,然后再将b赋值给a

还有条件运算符?:的关联性是右结合的,因此表达式a ? b : c ? d : e的结果是先计算c ? d : e,再计算a ? b : (c ? d : e)

总结

程序员应该了解C语言中的运算符优先级和关联性的规则,以编写高效、正确的代码。当表达式中运算符优先级较高时,应该使用圆括号来明确运算顺序;当运算符优先级相同时,应该遵循其关联性来确定运算顺序。