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