C语言中的基本运算符包括算术运算符、关系运算符、逻辑运算符、赋值运算符和位运算符。它们的优先级和结合性如下表所示
运算符 | 优先级 | 结合性
– | – | –
() | 1 | 从左到右
! ~ ++ — + – & sizeof | 2 | 从右到左
/ % | 3 | 从左到右
+ – | 4 | 从左到右
<>5 | 从左到右
<>= | 6 | 从左到右
== != | 7 | 从左到右
& | 8 | 从左到右
^ | 9 | 从左到右
\| | 10 | 从左到右
&& | 11 | 从左到右
\|\| | 12 | 从左到右
? | 13 | 从右到左
= += -= = /= %=<>= &= ^= \|= | 14 | 从右到左
, | 15 | 从左到右
2. 表达式求值顺序
在C语言中,表达式的求值顺序是未定义的。这意味着,当一个表达式包含多个运算符时,它们的求值顺序是不确定的。例如,对于表达式a + b c,大家无法确定是先计算b c,还是先计算a + b,因为它们的求值顺序是未定义的。
为避免表达式求值顺序的不确定性,大家可以使用括号来明确指定运算的顺序。例如,对于表达式(a + b) c,大家可以确定先计算a + b,再将结果乘以c。
3. 注意事项
在使用运算符时,大家需要注意以下几点
(1)赋值运算符的优先级,因此在表达式中使用赋值运算符时,需要格外注意运算顺序。
(2)逻辑运算符&&和||是短路运算符,即当左侧的表达式已经能够确定整个表达式的结果时,右侧的表达式将不再被求值。
(3)在使用位运算符时,需要注意数据类型的符号位,以避免出现意外的结果。
(4)在使用自增和自减运算符时,需要注意前缀和后缀的区别,以及它们对表达式求值的影响。
总之,在使用C语言中的运算符时,大家需要认真理解它们的优先级和结合性,以避免出现不必要的错误。同时,也需要注意表达式求值顺序的不确定性,尽可能使用括号来明确指定运算的顺序。