📅  最后修改于: 2023-12-03 15:14:25.392000             🧑  作者: Mango
在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语言中的运算符优先级和关联性的规则,以编写高效、正确的代码。当表达式中运算符优先级较高时,应该使用圆括号来明确运算顺序;当运算符优先级相同时,应该遵循其关联性来确定运算顺序。