05 · 运算符
分类速查
| 类别 | 运算符 | 注意 |
|---|---|---|
| 算术 | + - * / % |
整数除法截断:5/2 == 2;% 只能用于整数 |
| 关系 | == != > < >= <= |
结果 1 真 / 0 假 |
| 逻辑 | && \|\| ! |
短路求值:a && b,a 假则不看 b |
| 位运算 | & \| ^ ~ << >> |
Java 里用得少,C 里很常见 |
| 赋值 | = += -= *= /= %= |
复合赋值 a += b 即 a = a + b |
| 自增自减 | ++ -- |
前缀先运算,后缀先取值 |
| 其他 | sizeof ?: & * -> . |
& 取地址、* 解引用(见 09-指针) |
位运算(Java 里也学过,C 里更常用)
int a = 5; // 0101
a & 3; // 0001 = 1 按位与(常用于取某几位 / 判断奇偶)
a | 2; // 0111 = 7 按位或(常用于置位)
a ^ 1; // 0100 = 4 按位异或(常用于翻转某位)
~a; // 取反
a << 1; // 1010 = 10 左移 = 乘 2
a >> 1; // 0010 = 2 右移 = 除 2
两个必背陷阱
int a = 5, b = 10;
int eq = (a = b); // ⚠️ 赋值!a 变成 10,eq 也是 10
int eq2 = (a == b); // ✅ 比较,返回 0/1
int i = 0;
arr[i++] = i; // ⚠️ 同一表达式里对同一变量多次修改 → 未定义行为
优先级(不确定就加括号)
口诀:单目 > 算术 > 移位 > 关系 > 相等 > 位与 > 位异或 > 位或 > 逻辑与 > 逻辑或 > 三目 > 赋值
int max = (a > b) ? a : b; // 三目运算符,不确定优先级就加括号
关联
03-数据类型与变量 · 06-判断与循环 · 09-指针