运算符
C++ 运算符的使用方法和注意事项
该页部分内容使用 AI 技术生成。
在 C++ 编程中,运算符是用来对数据进行各种操作的特殊符号。我们可以把它们看作是“工具”,用来完成加法、比较大小、逻辑判断等任务。理解运算符的种类和用法,是学习 C++ 的基础之一。
下面是 C++ 中常见运算符的分类及举例说明:
1. 算术运算符
算术运算符用于进行基本的数学运算。
| 运算符 | 名称 | 示例 | 说明 |
|---|---|---|---|
| + | 加法 | a + b | 两数相加 |
| - | 减法 | a - b | 两数相减 |
| * | 乘法 | a * b | 两数相乘 |
| / | 除法 | a / b | 两数相除 |
| % | 取余 | a % b | 求余数(仅整数) |
2. 关系运算符
关系运算符用于比较两个值的大小或相等关系。
| 运算符 | 名称 | 示例 | 说明 |
|---|---|---|---|
| == | 等于 | a == b | 判断是否相等 |
| != | 不等于 | a != b | 判断是否不等 |
| > | 大于 | a > b | 判断是否大于 |
| < | 小于 | a < b | 判断是否小于 |
| >= | 大于等于 | a >= b | 判断是否大于等于 |
| <= | 小于等于 | a <= b | 判断是否小于等于 |
注意
== 和 = 是不同的运算符,前者用于比较,后者用于赋值。在条件判断的时候,不能使用 =,因为他不会返回任何值。
关系运算符会返回比较的结果,当关系式成立的时候,返回 true(真),否则返回 false(假)。
int main() {
int a = 5, b = 3;
bool result = a > b;
cout << result << endl; // 输出 1(true)
return 0;
}3. 逻辑运算符
逻辑运算符用于进行逻辑判断,常用于条件语句。
| 运算符 | 名称 | 示例 | 说明 |
|---|---|---|---|
| && | 逻辑与 | a && b | 两条件都为真时为真 |
| || | 逻辑或 | a || b | 有一个为真即为真 |
| ! | 逻辑非 | !a | 取反(真的变假的) |
与 可以认为是我们日常生活中所说的 “并且”;或 可以认为是我们日常生活中所说的 “或者”;非 可以认为是我们日常生活中所说的 “不是”。
int main() {
int a = 5, b = 3;
bool result = a > b && b < 4;
cout << result << endl; // 输出 1(true)
return 0;
}Tips
我们认为,只要值不为 0,即为真。
int a = 10;
if (a) {
cout << "a 不是空的" << endl;
}上述例中,a 与 a != 0 都是有效的判断条件。
4. 赋值运算符
赋值运算符用于给变量赋值或进行复合赋值。
| 运算符 | 名称 | 示例 | 说明 |
|---|---|---|---|
| = | 赋值 | a = b | 将 b 的值赋给 a |
| ++ | 自增 | a++ | 将 a 的值增加 1 |
| -- | 自减 | a-- | 将 a 的值减少 1 |
| += | 加等于 | 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 += 1;
b *= 2;
c /= 1;上面的例子中,a++ 和 ++b 都是自增运算符,分别表示将变量 a 和 b 的值增加 1。a += 1 表示将变量 a 的值增加 1,相当于 a = a + 1。b *= 2 表示将变量 b 的值乘以 2,相当于 b = b * 2。c /= 1 表示将变量 c 的值除以 1,相当于 c = c / 1。
注意
a++ 和 ++b 都是自增运算符,分别表示将变量 a 和 b 的值增加 1。但是,a++ 是后置自增,先使用再自增,而 ++b 是前置自增,先自增再使用。例如:
int a = 1, b = 1;
cout << a++ << std::endl; // 输出 1,然后 a 的值变为 2
cout << ++b << std::endl; // b 的值变为 2, 然后输出 2a++ 会先进行输出,然后自增,而 ++b 会先自增,然后输出。
5. 位运算符
位运算符用于对整数的二进制位进行操作。
| 运算符 | 名称 | 示例 | 说明 |
|---|---|---|---|
| & | 按位与 | a & b | 对应位都为1则为1 |
| | | 按位或 | a | b | 对应位有1则为1 |
| ^ | 按位异或 | a ^ b | 对应位不同则为1 |
| ~ | 按位取反 | ~a | 0变1,1变0 |
| << | 左移 | a << n | 左移 n 位 |
| >> | 右移 | a >> n | 右移 n 位 |
这个今后有机会会提到。
6. 成员运算符
成员运算符用于访问对象或指针的成员。
| 运算符 | 名称 | 示例 | 说明 |
|---|---|---|---|
| . | 点号 | obj.value | 访问对象成员 |
| -> | 箭头 | ptr->value | 访问指针对象成员 |
这会在后面的 struct、class 等等时候会提到。
运算符优先级
在 C++ 中,运算符优先级决定了表达式中各个运算符的计算顺序。比如:
int a = 2 + 3 * 4;乘法 * 的优先级比加法 + 高,所以会先算 3 * 4 = 12,再加上 2,结果是 14。
下面是常见运算符优先级从高到低的简要列表:
| 优先级 | 运算符 | 结合性 | 说明 |
|---|---|---|---|
| 1 | () [] -> . | 从左到右 | 括号、下标、成员访问 |
| 2 | ++ -- ! ~ + - (类型) | 从右到左 | 单目运算符、类型转换 |
| 3 | * / % | 从左到右 | 乘、除、取余 |
| 4 | + - | 从左到右 | 加、减 |
| 5 | << >> | 从左到右 | 位移 |
| 6 | < <= > >= | 从左到右 | 关系运算符 |
| 7 | == != | 从左到右 | 等于、不等于 |
| 8 | & | 从左到右 | 按位与 |
| 9 | ^ | 从左到右 | 按位异或 |
| 10 | | | 从左到右 | 按位或 |
| 11 | && | 从左到右 | 逻辑与 |
| 12 | || | 从左到右 | 逻辑或 |
| 13 | ?: | 从右到左 | 条件(三元)运算符 |
| 14 | = += -= *= /= %= ... | 从右到左 | 赋值及复合赋值 |
| 15 | , | 从左到右 | 逗号运算符 |
注意:
括号 () 可以改变运算顺序,优先计算括号内的表达式。例如:
int a = 2 + 3 * 4; // 14
int b = (2 + 3) * 4; // 20