C语言中的运算和运算符
一、运算符的优先级和结合性
1,优先级
运算符一览表中,运算符越靠上,优先级越高。
2,结合性
假如用O表示需要两个操作数的双目运算符,那么对于表达式aObOc:
左结合运算符会将表达式解释为 (aOb)Oc 【左结合性】
右结合运算符会将表达式解释为 aO(bOc) 【右结合性】
总结:遇到优先级相同的运算符时,结合性指明了表达式应从左往右运算还是从右往左运算。
二、运算符一览表
优先级 |
运算符 |
形式 |
名称 |
结合性 |
1 |
() |
x(y) |
函数调用运算符 |
左 |
1 |
[] |
X[y] |
下标运算符 |
左 |
1 |
. |
x.y |
.运算符(句点运算符) |
左 |
1 |
-> |
x->y |
->运算符(箭头运算符) |
左 |
1 |
++ |
x++ |
后置递增运算符 |
左 |
1 |
-- |
y-- |
后置递减运算符 |
左 |
2 |
++ |
++x |
前置递增运算符 |
右 |
2 |
-- |
--y |
前置递减运算符 |
右 |
2 |
sizeof |
sizeof x |
sizeof运算符 |
右 |
2 |
& |
&x |
单目运算符&(取址运算符) |
右 |
2 |
* |
*x |
单目运算符*(指针运算符) |
右 |
2 |
+ |
+x |
单目运算符+ |
右 |
2 |
- |
-x |
单目运算符- |
右 |
2 |
~ |
~x |
~运算符(按位求补运算符) |
右 |
3 |
! |
!x |
逻辑非运算符 |
右 |
3 |
() |
(x)y |
类型转换运算符 |
右 |
4 |
* |
x * y |
双目运算符* |
左 |
4 |
/ |
x / y |
/运算符 |
左 |
4 |
% |
x % y |
%运算符 |
左 |
5 |
+ |
x + y |
双目运算符+ |
左 |
5 |
- |
x - y |
双目运算符- |
左 |
6 |
<< |
x << y |
<<运算符 |
左 |
6 |
>> |
x >> y |
>>运算符 |
左 |
7 |
< |
x < y |
<运算符 |
左 |
7 |
<= |
x <= y |
<=运算符 |
左 |
7 |
> |
x > y |
>运算符 |
左 |
7 |
>= |
x >= y |
>=运算符 |
左 |
8 |
== |
x == y |
==运算符 |
左 |
8 |
!= |
x != y |
!=运算符 |
左 |
9 |
& |
x & y |
按位与运算符 |
左 |
10 |
^ |
x ^ y |
按位异或运算符 |
左 |
11 |
| |
x | y |
按位或运算符 |
左 |
12 |
&& |
x && y |
逻辑与运算符 |
左 |
13 |
|| |
x || y |
逻辑或运算符 |
左 |
14 |
? : |
x ? y : z |
条件运算符 |
右 |
15 |
= |
x = y |
基本赋值运算符 |
右 |
15 |
+= -= *= /= <<= >>= &= ^= |= |
|
复合赋值运算符 |
右 |
16 |
, |
x , y |
逗号运算符 |
左 |