跳转至

第三课:运算符与表达式

1. 算术运算符

运算符 含义 示例 结果
+ 加法 5 + 3 8
- 减法 5 - 3 2
* 乘法 5 * 3 15
/ 除法 5 / 3 1(整数除法截断)
% 取余(模运算) 5 % 3 2

整数除法的陷阱

int a = 5 / 3;     // a = 1(整数除法,小数部分被丢弃)
double b = 5 / 3;  // b = 1.0(先整数除法,再转double)
double c = 5.0 / 3; // c = 1.666...(浮点数除法)

自增/自减

int i = 1;
int a = ++i;   // 前置自增:i 先加 1 再赋值,a=2, i=2
int b = i++;   // 后置自增:先赋值再自增,b=2, i=3

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
int age = 18;
int has_id = 1;

if (age >= 18 && has_id) {
    printf("可以进入\n");
}

4. 位运算符(重点)

运算符 含义 示例
& 按位与 5 & 31
| 按位或 5 | 37
^ 按位异或 5 ^ 36
~ 按位取反 ~5
<< 左移 5 << 110(乘以2)
>> 右移 5 >> 12(除以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. 练习

动手实践

  1. 输入一个整数,判断它是奇数还是偶数(用位运算)
  2. 不使用第三个变量,交换两个整数的值
  3. 输入一个年份,判断是否为闰年(能被4整除但不能被100整除,或者能被400整除)

← 上一课:变量与数据类型 | 下一课:流程控制 →