565 字
1 分钟
【C】运算符
2026-05-19

算术运算符#

+ - * / %

  • 先乘除、后加减;可用括号改变顺序
  • 整数相除结果向零截断取整:5 / 2 == 2
  • 浮点运算:只要有一侧为浮点类型,按浮点规则运算;两 float 相除结果为 float(不会自动变成 double,除非发生提升)
  • 不能对 0 做除法或取模
  • 不能对浮点数使用 %
  • 负数取模:结果符号由实现定义(C99 前);实践中常与被除数同号

关系运算符#

< <= > >= == !=

  • 结果为 0(假)非 0(真);关系运算的结果通常是 0 或 1
  • 不要写 if (a = b) 当比较用,应写 if (a == b)

赋值运算符#

= += -= *= /= %=

  • 只能作用于可修改的左值(一般为变量)
  • 结合性:从右向左,如 a = b = 1

自增自减#

++ --(前缀与后缀)

int temp = 5;
int a = temp++; // a = 5,temp 变为 6
int b = ++temp; // temp 先变 7,b = 7
  • 不能用于常量或纯表达式(如 (a+b)++
  • 不要在同一表达式中对同一变量多次自增/自减,结果未定义

逻辑运算符#

&& || !

  • C 语言没有 a < b < c 这种链式比较,应写 a < b && b < c

短路求值#

  • &&:左侧为假则不再计算右侧
  • ||:左侧为真则不再计算右侧

常用于避免空指针解引用:ptr != NULL && *ptr > 0

逗号运算符#

,

从左到右依次求值各表达式,整个逗号表达式的值为最后一个表达式的值

int x = (1, 2, 3); // x 为 3
for (i = 0, j = 10; i < j; i++, j--) { }

条件运算符(三目)#

表达式1 ? 表达式2 : 表达式3
  • 表达式1 非 0 则求值表达式2,否则求值表达式3
  • 嵌套时:?右侧最近: 配对(结合方向自右向左)
int max = (a > b) ? a : b;

位运算符#

对整数类型的二进制位操作:& | ^ ~ << >>

运算符含义
&按位与,同为 1 才为 1
|按位或,有 1 则为 1
^按位异或,相同为 0
~按位取反
<<左移,右侧补 0
>>右移;无符号补 0;有符号右移实现定义
  • 移位位数须合法,过大或负数为未定义行为
  • 常用于标志位、权限掩码等

运算符优先级(由高到低)#

  1. () [] -> .、后缀 ++ --
  2. 前缀 ++ --+ -(正负)、! ~、强制转换、解引用 *、取址 &
  3. * / %
  4. + -
  5. << >>
  6. < <= > >=
  7. == !=
  8. &
  9. ^
  10. |
  11. &&
  12. ||
  13. ?:
  14. 赋值 = +=
  15. ,

不确定时加括号,可读性优先。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

【C】运算符
https://lysj.work/posts/studynotes/c/c运算符/
作者
Sekiro
发布于
2026-05-19
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录