运算符与表达式
在 C++ 中,运算符和表达式是进行计算和操作数据的核心工具。本节将介绍 C++ 中的各种运算符及其优先级,以及如何使用这些运算符构建表达式。
1. 运算符
C++ 支持多种类型的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符等。每种运算符执行不同类型的操作。
1.1 算术运算符
用于执行基本的数学运算。
- 加法 (
+):a + b,计算a和b的和。 - 减法 (
-):a - b,计算a和b的差。 - 乘法 (
*):a * b,计算a和b的积。 - 除法 (
/):a / b,计算a和b的商。 - 取余 (
%):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,如果a和b都为true,结果为true。 - 或 (
||):a || b,如果a或b为true,结果为true。 - 非 (
!):!a,如果a为false,结果为true。
bool p = true, q = false;
bool andResult = p && q; // false
bool orResult = p || q; // true
bool notResult = !p; // false
1.4 位运算符
用于操作整数类型的二进制位。
- 按位与 (
&):a & b,对a和b的每一位执行逻辑与操作。 - 按位或 (
|):a | b,对a和b的每一位执行逻辑或操作。 - 按位异或 (
^):a ^ b,对a和b的每一位执行逻辑异或操作。 - 按位取反 (
~):~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++ 中基本的计算工具。掌握不同类型的运算符及其优先级,能够帮助你构建更复杂的计算逻辑和实现程序功能。通过合理使用运算符和表达式,可以编写高效、简洁的代码。