C语言运算符的优先级(超全)
最全总结,对于学习C的朋友们,运算符及其优先级还是必须要熟悉的!
C中的运算符共十三类:
- 算术运算符:+ - * / %
- 关系运算符:< > == <= >=
- 逻辑运算符:! && ||
- 位运算符:>> << ~ | ^ &
- 赋值运算符:=及其扩展运算符
- 条件运算符:?:
- 逗号运算符:,
- 指针运算符:* &
- 求字节运算符:sizeof
- 强制类型转换:(类型)
- 分量运算符:. ->
- 下标运算符:[ ]
- 其它:如函数调用运算符()
优先级:
优先级可分为十五级:
-
[] () . -> 左到右
-
~ -(负号) ++ -- *(指针) &(取址) ! (类型)(强制类型转换) sizeof() 右到左,单目运算符
-
/ *(乘) % 左到右,双目运算符
-
+ - 左到右,双目运算符
-
<< >> 左到右,双目运算符
-
< > <= >= 左到右,双目运算符
-
== != 左到右,双目运算符
-
&(按位与) 左到右,双目运算符
-
^(按位异或) 左到右,双目运算符
-
| 左到右,双目运算符
-
&& 左到右,双目运算符
-
|| 左到右,双目运算符
-
? : 右到左,三目运算符
-
%= /= *= += -= <<= >>= &= (按位与后等于) |= ^= 右到左
-
, 左到右
同一优先级,运算顺序由运算方向决定
!>算术运算符>关系运算符>&>^>|>逻辑运算符>三目运算符>赋值运算符
下面写一些体现运算关系的有趣代码:
int i=1,j=3;
i-1&&printf("%d\n",j&i);//此行不会打印出1(i&j)
i-1||printf("%d\n",j|i);//此行会打印出3(i|j)
i--&&printf("%d\n",~j);//此行会打印出-4(~j)
--i||printf("%d\n",i^j);//此行不会打印出-4(i^j)