運算子
運算子的元數,一個優先順序和關聯性。
-
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 ++)
因為最右邊的一元運算子(
++
)首先繫結到它的單個運算元。