第三课:运算符与表达式¶
1. 算术运算符¶
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
+ |
加法 | 5 + 3 |
8 |
- |
减法 | 5 - 3 |
2 |
* |
乘法 | 5 * 3 |
15 |
/ |
除法 | 5 / 3 |
1(整数除法截断) |
% |
取余(模运算) | 5 % 3 |
2 |
整数除法的陷阱
自增/自减¶
2. 关系运算符(比较运算符)¶
| 运算符 | 含义 | 示例 |
|---|---|---|
== |
等于 | a == b |
!= |
不等于 | a != b |
> |
大于 | a > b |
< |
小于 | a < b |
>= |
大于等于 | a >= b |
<= |
小于等于 | a <= b |
关系表达式的结果为 1(真)或 0(假)。
3. 逻辑运算符¶
| 运算符 | 含义 | 示例 |
|---|---|---|
&& |
逻辑与(AND) | a > 0 && a < 100 |
|| |
逻辑或(OR) | a < 0 || a > 100 |
! |
逻辑非(NOT) | !flag |
4. 位运算符(重点)¶
| 运算符 | 含义 | 示例 |
|---|---|---|
& |
按位与 | 5 & 3 → 1 |
| |
按位或 | 5 | 3 → 7 |
^ |
按位异或 | 5 ^ 3 → 6 |
~ |
按位取反 | ~5 |
<< |
左移 | 5 << 1 → 10(乘以2) |
>> |
右移 | 5 >> 1 → 2(除以2) |
// 常用技巧:用位运算判断奇偶
int n = 5;
if (n & 1) {
printf("奇数\n");
} else {
printf("偶数\n");
}
// 用异或交换两个数(不需临时变量)
int a = 3, b = 5;
a = a ^ b;
b = a ^ b;
a = a ^ b; // a=5, b=3
5. 赋值运算符¶
int a = 10;
a += 5; // a = a + 5 → 15
a -= 3; // a = a - 3 → 12
a *= 2; // a = a * 2 → 24
a /= 4; // a = a / 4 → 6
a %= 3; // a = a % 3 → 0
6. 运算符优先级(速查表)¶
| 优先级 | 运算符 |
|---|---|
| 1(最高) | () [] . -> |
| 2 | ! ~ ++ -- -(负号)*(解引用)&(取地址) |
| 3 | * / % |
| 4 | + - |
| 5 | << >> |
| 6 | < <= > >= |
| 7 | == != |
| 8 | &(按位与) |
| 9 | ^ |
| 10 | | |
| 11 | && |
| 12 | || |
| 13 | = += -= 等赋值运算符 |
最佳实践
当不确定优先级时,使用括号 () 明确表达意图,这不仅避免错误,也让代码更易读。
7. 练习¶
动手实践
- 输入一个整数,判断它是奇数还是偶数(用位运算)
- 不使用第三个变量,交换两个整数的值
- 输入一个年份,判断是否为闰年(能被4整除但不能被100整除,或者能被400整除)