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

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

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

C语言中的运算符具有不同的优先级和关联性。运算符优先级和关联性决定了表达式中运算符的计算顺序和结合方式。了解这些规则可以帮助程序员编写更加准确和易于理解的代码。

运算符优先级

运算符优先级指定了运算符按照什么顺序被计算。优先级越高,越先被计算。C语言中的优先级从高到低排列如下:

()      []      ->      .       ++      --   (postfix operators)
++      --      +       -       !       ~    (unary operators)
*       /       %                       (multiplication, division, modulus)
+       -                               (addition, subtraction)
<<      >>                              (bitwise shift operators)
<       <=      >       >=              (relational operators)
==      !=                              (equality operators)
&                                       (bitwise AND)
^                                       (bitwise XOR)
|                                       (bitwise OR)
&&                                      (logical AND)
||                                      (logical OR)
?:                                      (conditional operator)
=       +=      -=      *=      /=     %=   (assignment operators)
&=      ^=      |=      <<=     >>=    (bitwise assignment operators)
,                                       (comma operator)

这个表格中的运算符按照优先级从高到低排列。如果表达式中包含多个运算符,则优先级高的运算符会先被计算。例如,对于表达式 5 + 6 * 7,乘法运算符的优先级高于加法运算符,所以先计算 6 * 7 再加上 5,结果为 47。如果想要优先计算加法运算符,可以使用圆括号来改变优先级,例如 (5 + 6) * 7 就先计算了加法运算符。

运算符关联性

运算符关联性指定了相同优先级的运算符在没有圆括号的情况下如何组合。C语言中有两种运算符关联性:左关联性和右关联性。

左关联性表示相同优先级的运算符从左往右计算。例如,对于表达式 5 - 3 - 1,减法运算符的优先级相同,所以按照左关联性从左到右计算,结果为 1

右关联性表示相同优先级的运算符从右往左计算。C语言中只有一个运算符具有右关联性,那就是赋值运算符 =。例如,对于表达式 a = b = c,赋值运算符的优先级相同,根据右关联性,从右往左计算,结果为 c 被赋值给了 b,然后 b 被赋值给了 a

总结

在C语言中,运算符的优先级和关联性经常对表达式的计算结果产生影响。程序员应该掌握这些规则,以便编写高效和正确的代码。