C语言运算符及优先级
算数运算符
+, -
单周期运算
注意参与运算的量的类型变化
*(乘法), /, %
CPU可能需要多个周期,甚至不支持时,需要使用库软件模拟
逻辑运算符
||, &&
||:判定到非假则停止执行,输出非假
&&:判定到假则停止执行,输出假
>, >=, <, <=
!
非假与假之间转换
?:
A ? B : C;
A为非假执行B,否则执行C。
位运算符
<<, >>
*2 或 /2
<<:填0
>>:有符号:填符号位(负数:1;正数:0);无符号:填0
&(按位与), |
& 0 :清零
| 1 :设置
^, ~
^:异或
~:按位取反
赋值运算符
=
+=, -=, *=, /=, %=, !=, <<=, >>=, &=, |=, ^=, ~=
内存访问符号
()
提高表达式优先级,函数参数
[]
数组下标
{}
非运算符
对象,函数
->, .
对象成员选择(指针):->
对象成员选择:.
*(指针取值), &(变量取地址)
其他
-(负号)
(类型)强制转换
sizeof
属于关键字,也是长度运算符,可以加()但是不是函数
,
从左至右依次运算
优先级表
优先级 | 运算符 |
---|---|
1 | [], (), ., ->, 变量 ++, 变量 – |
2 | -(负号), (强制转换类型), ++ 变量, – 变量, *(指针取值), &(变量取地址), !, ~, sizeof |
3 | *(乘法), /, % |
4 | +, - |
5 | <<, >> |
6 | >, >=, <, <= |
7 | ==, != |
8 | &(按位与) |
9 | ^ |
10 | | |
11 | && |
12 | || |
13 | ?: |
14 | =, +=, -=, *=, /=, %=, !=, <<=, >>=, &=, |=, ^=, ~= |
15 | , |