C语言中的运算符及其用法

算术运算符

C支持以下基本算术运算符:

表达式 含义
c = a * b 乘法
c = a / b 除法
c = a % b 取模(余数)
c = a + b 加法
c = a - b 减法

自增与自减运算符

表达式 含义
++a 前置自增,先加后用
a++ 后置自增,先用后加
--a 前置自减,先减后用
a-- 后置自减,先用后减

注意:
在仅需要执行增减操作时,a++++a 的差异无关紧要。但在复杂表达式中,这种区别可能引发微妙的编程错误。例如:

int a = 5, b;
b = a++ + 10;  // b = 15, a = 6
b = ++a + 10;  // b = 16, a = 6

位运算符

C支持以下位运算符:

表达式 含义
a = ~a 按位取反
a = b << c 左移 b 的位数由 c 指定
a = b >> c 右移 b 的位数由 c 指定
a = b & c 按位与
a = b ^ c 按位异或
`a = b c`

简化赋值运算符

C允许将数学操作和赋值结合成简化形式:

操作 简化形式
a = a * b a *= b
a = a / b a /= b
a = a % b a %= b
a = a + b a += b
a = a - b a -= b
a = a << b a <<= b
a = a >> b a >>= b
a = a & b a &= b
a = a ^ b a ^= b
`a = a b`

关系运算符

这些运算符比较两个值并返回 1(true)或 0(false):

表达式 含义
a == b 等于
a != b 不等于
a < b 小于
a > b 大于
a <= b 小于或等于
a >= b 大于或等于

示例:

a = b * (b < 2) + 10 * (b >= 2);

此表达式当 b < 2 时,a = b;否则,a = 10。这种写法虽紧凑,但不推荐,替代方式为:

a = (b < 2) ? b : 10;  // 使用三元运算符

逻辑运算符

运算符 含义
! 逻辑非
&& 逻辑与
`  

注意:
逻辑运算符与位运算符不同:

  • 逻辑运算符将操作数视为布尔值,非零为 true,零为 false
  • 位运算符在位级别执行操作。

示例:

if ((A == 5) && (B == 10))
{
   ...
}

sizeof 运算符

sizeof 返回操作数的字节大小。例如:

int tvar;
printf("Size = %d\n", sizeof(int)); // 输出数据类型 `int` 的大小

如果操作数是数组,则返回整个数组的大小。


运算符优先级

运算符按照优先级从高到低进行计算(从左到右):

优先级 运算符
最高 () [] -> .
  ! ~ ++ -- (cast) & sizeof -
  * / %
  + -
  << >>
  < <= > >=
  == !=
  &
  ^
  `
  &&
  `
  ?:
最低 = += -= *= /= %= ...

建议:
如果对优先级有疑问,使用括号明确表达顺序。例如:

result = a + b * c;        // 易引起混淆
result = a + (b * c);      // 明确优先级

数学库函数

C语言提供了高级数学库函数(如三角函数、指数函数等),可在 <math.h> 中找到。这些将在后续章节详细讨论。


总结

  • 算术运算符: 支持常见的数学计算。
  • 自增/自减: 区分前置和后置形式。
  • 位运算符: 用于操作二进制位。
  • 简化赋值: 提高代码简洁性。
  • 逻辑与关系运算符: 用于布尔值判断。
  • sizeof 运算符: 获取数据类型或变量的大小。
  • 优先级与括号: 使用括号避免优先级导致的歧义。
最后修改: 2025年01月27日 星期一 23:12