运算符
运算符的元数,一个优先级和关联性。
-
Arity 表示操作数的数量。在 C 中,存在三种不同的运算符:
- 一元(1 个操作数)
- 二进制(2 个操作数)
- 三元(3 个操作数)
-
优先级表示哪些运算符首先绑定到它们的操作数。也就是说,哪个运算符优先对其操作数进行操作。例如,C 语言遵循乘法和除法优先于加法和减法的约定:
a * b + c
给出相同的结果
(a * b) + c
如果这不是想要的,可以使用括号强制优先级,因为它们具有所有运算符的最高优先级。
a * (b + c)
这个新表达式将产生一个与前两个表达式不同的结果。
C 语言有许多优先级; 下面给出了所有运算符的表,按优先级的降序排列。
优先表
运算符 关联性 ()
[]
->
.
左到右 !
~
++
--
+
-
*
(dereference)(type)
sizeof
右到左 *
(乘法)/
%
左到右 +
-
左到右 <<
>>
左到右 <
<=
>
>=
左到右 ==
!=
左到右 &
左到右 ^
左到右 |
左到右 &&
左到右 ||
左到右 ?:
右到左 =
+=
-=
*=
/=
%=
&=
^=
|=
<<=
>>=
右到左 ,
左到右 -
关联性表示默认情况下等同优先级运算符的绑定方式,有两种: 从左到右和从右到左。从左到右绑定的一个例子是减法运算符(
-
)。表达方式a - b - c - d
有三个相同的优先级减法,但给出相同的结果
((a - b) - c) - d
因为最左边的
-
首先绑定到它的两个操作数。从右到左关联的一个例子是取消引用
*
和后增量++
运算符。两者都具有相同的优先级,因此如果它们用在诸如的表达式中* ptr ++
,这相当于
* (ptr ++)
因为最右边的一元运算符(
++
)首先绑定到它的单个操作数。