05 · 运算符

2026.09.27 · 🟡 中

分类速查

类别 运算符 注意
算术 + - * / % 整数除法截断: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-指针