C 运算符的优先级和结合性

运算符的优先级

运算符的优先级决定了在一个表达式中有多个运算符时,哪个运算符首先被执行。

让我们看一个例子

int x = 5 - 17* 6;

在 C 语言中,* 的优先级高于 -=。因此,首先计算 17 * 6。然后计算涉及 - 的表达式,因为 - 的优先级高于 =

以下是运算符优先级从高到低的表格。结合性的属性将在稍后讨论。


运算符优先级和结合性表

运算符 运算符含义 结合性
()
[]
->
.
函数调用
数组元素引用
间接成员选择
直接成员选择
从左到右
!
~
+
-
++
--
&
*
sizeof
(类型)
逻辑非
按位(1 的)补码
一元加
一元减
递增
递减
解引用 (地址)
指针引用
返回对象的大小
类型转换 (转换)
从右到左
*
/
%

除法
余数
从左到右
+
-
二元加 (加法)
二元减 (减法)
从左到右
<<
>>
左移
右移
从左到右
<
<=
>
>=
小于
小于或等于
大于
大于或等于
从左到右
==
!=
等于
不等于
从左到右
& 按位与 从左到右
^ 按位异或 从左到右
| 按位或 从左到右
&& 逻辑与 从左到右
|| 逻辑或 从左到右
?: 条件运算符 从右到左
=
*=
/=
%=
+=
-=
&=
^=
|=
<<=
>>=
简单赋值
乘法赋值
除法赋值
取模赋值
加法赋值
减法赋值
按位与赋值
按位异或赋值
按位或赋值
左移赋值
右移赋值
从右到左
, 表达式分隔符 从左到右

运算符的结合性

运算符的结合性决定了表达式的计算方向。例如,

b = a;

在这里,a 的值被赋给了 b,而不是反过来。这是因为 = 运算符的结合性是从右到左的。

此外,如果存在两个具有相同优先级 (priority) 的运算符,结合性决定了它们的执行方向。

让我们看一个例子

1 == 2 != 3

在这里,运算符 ==!= 具有相同的优先级。而且,它们的结合性是从左到右的。因此,首先计算 1 == 2

上面的表达式等价于

(1 == 2) != 3

注意: 如果一个语句有多个运算符,您可以使用括号 () 使代码更易读。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战