C语言运算符是对C语言数据进行处理的记号,按照相关性大概分为算术运算符,逻辑运算符,关系运算符,位运算符和其他一些比较杂的运算符。C11上有很多种,具体参考《6.5 Expressions》。这里为了简化才如此划分,为了归类叙述方便而已。
具体运算符,归纳在了下面的表格中。
运算符类型 | 记号 | 示例 | 说明 |
---|---|---|---|
算术运算 | + | a+b | 算术加法。 |
- | a-b | 算术减法。 | |
* | a*b | 算术乘法。 | |
/ | a/b | 算术除法,对于两个整型来说是整除。 | |
% | a%b | 求余运算。 | |
++ | a++或++a | 自增运算。a++先使用a的值,再自增;++a,先自增再使用a的值。 | |
-- | a--或--a | 自减运算。a--先使用a的值,再自减;--a,先自减再使用a的值。 | |
逻辑运算 | && | a && b | 与或非的逻辑运算按照真值表来进行,结果是个布尔值。 |
|| | a || b | 与或非的逻辑运算按照真值表来进行,结果是个布尔值。 | |
! | !a | 与或非的逻辑运算按照真值表来进行,结果是个布尔值。 | |
关系运算 | != | a != b | 判断a和b是否不等,不等为真,相等为假。 |
== | a == b | 判断a和b是否相等,相等为真,不等为假。 | |
> | a > b | 判断a是否大于b,是则为真,否则为假。 | |
>= | a != b | 判断a是否大于等于b,是则为真,否则为假。 | |
< | a < b | 判断a是否小于b,是则为真,否则为假。 | |
<= | a <= b | 判断a是否小于等于b,是则为真,否则为假。 | |
位运算 | & | a & b | 比特与运算,a和b的二进制位相与得到的结果。 |
| | a | b | 比特或运算,a和b的二进制位相或得到的结果。 | |
~ | ~a | 比特取反运算,a的二进制位取反得到的结果。 | |
^ | a ^ b | 比特异或运算,a和b的二进制位相异或得到的结果。 | |
<< | a << 1 | 比特左移运算,a的二进制位左移一位,右侧补0。 | |
>> | a >> 1 | 比特右移运算,a的二进制位右移以为,左侧补0。 | |
赋值运算 | = | a = 0 | 将a赋值为0。 |
+= | a += b | 相当于a = a + b。 | |
-= | a -= b | 相当于a = a - b。 | |
*= | a *= b | 相当于a = a * b。 | |
/= | a /= b | 相当于a = a / b。 | |
%= | a %= b | 相当于a = a % b。 | |
&= | a &= b | 相当于a = a & b。 | |
^= | a ^= b | 相当于a = a ^ b。 | |
|= | a |= b | 相当于a = a | b。 | |
<<= | a <<= b | 相当于a = a << b。 | |
>>= | a >>= b | 相当于a = a >> b。 | |
三目运算 | ?: | x = a ? b : c | 如果a为真,则x被赋值为b,否则被赋值为c。 |
下标运算 | [] | a[0] | 获取数组a的第0个元素。 |
逗号运算 | , | a++,b++,c=0; | 逗号运算符的值是最后一个表达式的值,这里是0. |
取址运算 | & | &a | 获取变量a的地址值 |
取值运算 | * | *a | 获取变量a的地址空间 |
成员选择 | . | a.b | 获取结构体(联合体)变量a的成员b |
成员选择 | -> | a->b | 获取结构体(联合体)指针变量a的成员b |
长度运算 | sizeof | sizeof(a) | 类型a在内存中占用的内存长度,单位byte。 |
C语言的运算符之间有优先级,即在同一语句里面,先计算哪个运算,后计算哪个运算,这个称之为结合性。C语言结合性较为复杂,一般建议使用()来显式表达计算结合性,这样简单明了,方便开发阅读和维护。
一般优先级从高到低是取址寻址成员选择(单目),算术运算,位运算,逻辑运算,具体可以参考百度百科《运算符优先级》。这里也简单罗列如下,方便查阅。
优先级 | 运算符 |
---|---|
1 | [] () . -> |
2 | -(负号) ++ -- *(取值) &(取址) ! ~ sizeof |
3 | / *(乘) % |
4 | + -(减) |
5 | << >> |
6 | > >= < <= |
7 | == != |
8 | &(按位与) |
9 | ^ |
10 | | |
11 | && |
12 | || |
13 | ?: |
14 | = += -= *= /= %= &= ^= |= <<= >>= |
15 | ,(逗号运算) |
参考资料:百度百科《运算符优先级》
C11标准