运算符与表达式

在 C++ 中,运算符和表达式是进行计算和操作数据的核心工具。本节将介绍 C++ 中的各种运算符及其优先级,以及如何使用这些运算符构建表达式。

1. 运算符

C++ 支持多种类型的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符等。每种运算符执行不同类型的操作。

1.1 算术运算符

用于执行基本的数学运算。

  • 加法 (+):a + b,计算 ab 的和。
  • 减法 (-):a - b,计算 ab 的差。
  • 乘法 (*):a * b,计算 ab 的积。
  • 除法 (/):a / b,计算 ab 的商。
  • 取余 (%):a % b,计算 a 除以 b 的余数。
int a = 10, b = 3;
int sum = a + b;    // 13
int diff = a - b;   // 7
int prod = a * b;   // 30
int quot = a / b;   // 3
int rem = a % b;    // 1

1.2 关系运算符

用于比较两个值的大小或相等性。

  • 等于 (==):a == b,如果 a 等于 b,结果为 true
  • 不等于 (!=):a != b,如果 a 不等于 b,结果为 true
  • 大于 (>):a > b,如果 a 大于 b,结果为 true
  • 小于 (<):a < b,如果 a 小于 b,结果为 true
  • 大于等于 (>=):a >= b,如果 a 大于或等于 b,结果为 true
  • 小于等于 (<=):a <= b,如果 a 小于或等于 b,结果为 true
bool equal = (a == b);  // false
bool notEqual = (a != b);  // true
bool greater = (a > b);  // true
bool less = (a < b);  // false

1.3 逻辑运算符

用于处理布尔值的逻辑操作。

  • (&&):a && b,如果 ab 都为 true,结果为 true
  • (||):a || b,如果 abtrue,结果为 true
  • (!):!a,如果 afalse,结果为 true
bool p = true, q = false;
bool andResult = p && q;  // false
bool orResult = p || q;   // true
bool notResult = !p;      // false

1.4 位运算符

用于操作整数类型的二进制位。

  • 按位与 (&):a & b,对 ab 的每一位执行逻辑与操作。
  • 按位或 (|):a | b,对 ab 的每一位执行逻辑或操作。
  • 按位异或 (^):a ^ b,对 ab 的每一位执行逻辑异或操作。
  • 按位取反 (~):~a,对 a 的每一位执行取反操作。
  • 左移 (<<):a << b,将 a 的位向左移动 b 位。
  • 右移 (>>):a >> b,将 a 的位向右移动 b 位。
int x = 5, y = 3;
int andResult = x & y;  // 1
int orResult = x | y;   // 7
int xorResult = x ^ y;  // 6
int notResult = ~x;     // -6 (按位取反)
int leftShift = x << 1; // 10
int rightShift = x >> 1; // 2

1.5 赋值运算符

用于将右侧的值赋给左侧的变量。

  • 简单赋值 (=):a = b,将 b 的值赋给 a
  • 加赋值 (+=):a += b,将 b 的值加到 a 上并赋值给 a
  • 减赋值 (-=):a -= b,将 b 的值从 a 中减去并赋值给 a
  • 乘赋值 (*=):a *= b,将 a 乘以 b 并赋值给 a
  • 除赋值 (/=):a /= b,将 a 除以 b 并赋值给 a
  • 取余赋值 (%=):a %= b,将 a 除以 b 的余数赋值给 a
int z = 10;
z += 5;  // z = 15
z -= 3;  // z = 12
z *= 2;  // z = 24
z /= 4;  // z = 6
z %= 4;  // z = 2

1.6 其他运算符

  • 条件运算符 (? :):用于简化条件语句的表达。
int max = (a > b) ? a : b;  // 如果 a 大于 b,max 为 a,否则为 b
  • 逗号运算符 (,): 在一条语句中执行多个表达式,并返回最后一个表达式的结果。
int result = (a = 5, a + 3);  // 先将 a 赋值为 5,然后计算 a + 3,结果为 8
  • 指针运算符:用于指针的解引用和取地址操作。
    • 取地址运算符 (&): &a,返回变量 a 的地址。
    • 解引用运算符 (*): *p,返回指针 p 所指向的值。
int var = 10;
int* ptr = &var;  // 取地址
int value = *ptr; // 解引用,值为 10

2. 表达式

表达式是由操作数和运算符构成的语法单元,用于执行计算和操作。表达式的值可以赋给变量或用于函数调用。

2.1 运算符优先级与结合性

运算符优先级决定了在表达式中运算符的执行顺序。结合性决定了在运算符优先级相同的情况下,运算符的执行顺序。

int result = 3 + 4 * 2; // 结果为 11,因为乘法优先于加法

运算符的结合性:

  • 从左到右(例如,加法、减法、乘法)
  • 从右到左(例如,赋值运算符)

3. 总结

运算符和表达式是 C++ 中基本的计算工具。掌握不同类型的运算符及其优先级,能够帮助你构建更复杂的计算逻辑和实现程序功能。通过合理使用运算符和表达式,可以编写高效、简洁的代码。