运算符
运算符类型 | 说明 | 运算符类型 | 说明 |
算术运算符 | + − * / % | 指针运算符 | * & |
关系运算符 | > < == >= <= ! = | 求字节数运算符 | sizeof |
逻辑运算符 | ! && || | 强制类型转换运算符 | (类型) |
位运算符 | << >> ^ | & ~ | 分量运算符 | . → |
赋值运算符 | = 及其扩展赋值运算符 | 下标运算符 | [] |
条件运算符 | ? : | 其他 | 如函数调用运算符() |
逗号运算符 | , |
算数运算符
运算符 | 描述 | 结合性 |
+ | 单目正 | 从右至左 |
− | 单目负 | 从右至左 |
* | 乘 | 从左至右 |
/ | 除和整除 | 从左至右 |
% | 取模(取余) | 从左至右 |
+ | 双目加 | 从左至右 |
− | 双目减 | 从左至右 |
关系运算符
运算符 | 功能说明 | 示例 |
> | 大于 | a > b或a > 5 |
>= | 大于等于 | a >= b或a >= 5 |
< | 小于 | a < b或a < 5 |
<= | 小于等于 | a <= b或a <= 5 |
== | 等于 | a == b或a == 5 |
!= | 不等于 | a != b或a != 5 |
逻辑运算符
- 与运算(&&):
双目运算符,只有两个运算量都是1时,运算结果才为1,左结合型
左运算量 | 右运算量 | &&运算结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
- 或运算(||):
双目运算符,只要有一个运算量为1,结果就为1,左结合型
左运算量 | 右运算量 | 运算结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
- 非运算(!)
单目运算符,当运算量进行非运算,结果会取反,右结合性
运算量 | !运算结果 |
---|---|
0 | 1 |
1 | 0 |
位运算符
运算符 | 功能说明 | 示例 |
~ | 位逻辑反 | ~a |
& | 位逻辑与 | a&b |
| | 位逻辑或 | a|b |
^ | 位逻辑异或 | a^b |
>> | 右移位 | a>>1 |
<< | 左移位 | b<<4 |
- 非运算(~)
单目运算符,当运算量进行非运算,结果会取反
运算量 | ~运算结果 |
---|---|
0 | 1 |
1 | 0 |
- 与运算符(&)
- 双目操作符,当两个位进行相与时,只有两者都为“1”时结果才为“1”。
左运算量 | 右运算量 | &运算结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
- 或运算符(|)
- 双目操作符,当两个位进行相或时,两者中只要有一方为“1”,结果就为“1”
左运算量 | 右运算量 | 运算结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
- 异或运算符(|)
- 双目操作符,当两个位进行异或时只要两者相同,结果就为“0”,否则结果为“1”
左运算量 | 右运算量 | ^运算结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 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 = & b |
|= | 位或赋值复合运算符 | a |= b等价于a = a | b |
^= | 位异或赋值复合运算符 | a ^= b等价于a = a ^ b |
>>= | 位右移赋值复合运算符 | a >>= b 等价于a = a >> b |
<<= | 位左移赋值复合运算符 | a <<= b 等价于a = a << b |
特殊运算符
条件运算符“?:”
- 是三目运算符,其运算的一般形式是:
- <表达式1>?<表达式2>:<表达式3>
<表达式1>?<表达式2>:<表达式3>
关系如下:
if(表达式1)
表达式2
else
表达式3
#include <stdio.h>
int main(int argc, char *argv[])
{
int x = 70, y = 10;
//y = x++ > 70 ? x + y : 5;
y = ++x > 70 ? x + y : 5;
printf("x=%d y = %d\n", x, y);
return 0;
}
逗号运算符“,”
float x = 10.5, y = 18, z = 0;
z = (x += 5, y = x + 0.2)
z赋值为15.7, x赋值为15.6, y赋值为15.7
z = (x = y = 5, x += 1)
z赋值为6, x赋值为6, y赋值为5
z = (x = 5, y = 6, x + y)
z赋值为11, x赋值为5, y赋值为6
z = (z = 8,x = 5, y = 3)
z赋值为3, x赋值为5, y赋值为3
sizeof操作符
- 单目运算符,它的运算对象是变量或数据类型,运算结果为一个整数
- sizeof(<类型或变量名>)
运算符优先级
运算符的优先级和结合性
优 先 级 | 运 算 符 | "含义" | 运算对象个数 | 结 合 方 向 |
1 | () | 圆括号 | 自左向右 | |
[] | 下标运算符 | |||
−> | 指向结构体成员运算符 | |||
. | 结构体成员运算符 | |||
2 | ! | 逻辑非运算 | 1(单目) | 自右向左 |
~ | 按位取反运算 | |||
++ | 自增运算符 | |||
− − | 自减运算符 | |||
− | 负号运算符 | |||
(类型) | 类型转换运算符 | |||
* | 指针运算符 | |||
& | 地址运算符 | |||
sizeof | 长度运算符 | |||
3 | * | 乘法运算符 | 2(双目) | 自左向右 |
/ | 除法运算符 | |||
% | 求余运算符 | |||
4 | + | 加法运算符 | 2(双目) | 自左向右 |
− | 减法运算符 | |||
5 | << | 左移运算符 | 2(双目) | 自左向右 |
>> | 右移运算符 | |||
6 | < | 关系运算符 | 2(双目) | 自左向右 |
<= | ||||
> | ||||
>= | ||||
7 | = = | 等于运算符 | 2(双目) | 自左向右 |
!= | 不等于运算符 | |||
8 | & | 按位与运算符 | 2(双目) | 自左向右 |
9 | ^ | 按位异或运算符 | 2(双目) | 自左向右 |
10 | | | 按位或运算符 | 2(双目) | 自左向右 |
11 | && | 逻辑与运算符 | 2(双目) | 自左向右 |
12 | || | 逻辑或运算符 | 2(双目) | 自左向右 |
13 | ? : | 条件运算符 | 3(三目) | 自右向左 |
14 | = | 赋值运算符 | 2(双目) | 自右向左 |
+= | ||||
−= | ||||
*= | ||||
/= | ||||
%= | ||||
>>= | ||||
<<= | ||||
&= | ||||
^= | ||||
|= | ||||
15 | , | 逗号运算符 | 自左向右 | |