掌握 C++ 运算符:六大类型全解析与实战示例
C++ 运算符完全指南
系统学习 C++ 六大类运算符:算术、赋值、关系、逻辑、位运算及其他,附完整示例表格与优先级陷阱避坑指南。
运算符是对变量/值执行操作的符号。如 + 执行加法,- 执行减法。
C++ 运算符分 6 类:
- 算术运算符
- 赋值运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 其他运算符
1. 算术运算符
执行数学运算:
| 运算符 | 操作 |
|---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取模(求余) |
示例 1:算术运算符
#include <iostream>
using namespace std;
int main() {
int a = 7, b = 2;
cout << "a + b = " << (a + b) << endl;
cout << "a - b = " << (a - b) << endl;
cout << "a * b = " << (a * b) << endl;
cout << "a / b = " << (a / b) << endl;
cout << "a % b = " << (a % b) << endl;
return 0;
}
输出
a + b = 9 a - b = 5 a * b = 14 a / b = 3 a % b = 1
除法细节:整数除整数得商(截断);任一操作数为浮点数则得浮点结果。
7/2 = 3 7.0/2 = 3.5 7/2.0 = 3.5 7.0/2.0 = 3.5
取模细节:% 仅用于整数。9 % 4 = 1。
% 只能用于整数类型。自增/自减运算符
++增加 1--减少 1
示例:int num = 5; ++num; // 6
示例 2:前缀/后缀自增自减
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 100, result_a, result_b;
result_a = ++a; // 前缀:先增后用
cout << "result_a = " << result_a << endl;
result_b = --b; // 前缀:先减后用
cout << "result_b = " << result_b << endl;
return 0;
}
输出
result_a = 11 result_b = 99
后缀形式(a++、b--)先用后增/减。详见 自增自减详解。
2. 赋值运算符
将值赋给变量:a = 5;
| 运算符 | 示例 | 等价于 |
|---|---|---|
= | a = b; | 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; |
示例 3:复合赋值
#include <iostream>
using namespace std;
int main() {
int a = 2, b = 7;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "\nAfter a += b;" << endl;
a += b; // a = a + b
cout << "a = " << a << endl;
return 0;
}
输出
a = 2 b = 7 After a += b; a = 9
3. 关系运算符
比较两个操作数关系,结果为 true(1) 或 false(0)。
| 运算符 | 含义 | 示例 |
|---|---|---|
== | 等于 | 3 == 5 → false |
!= | 不等于 | 3 != 5 → true |
> | 大于 | 3 > 5 → false |
< | 小于 | 3 < 5 → true |
>= | 大于等于 | 3 >= 5 → false |
<= | 小于等于 | 3 <= 5 → true |
示例 4:关系运算符
#include <iostream>
using namespace std;
int main() {
int a = 3, b = 5;
bool result;
result = (a == b); cout << "3 == 5 is " << result << endl;
result = (a != b); cout << "3 != 5 is " << result << endl;
result = (a > b); cout << "3 > 5 is " << result << endl;
result = (a < b); cout << "3 < 5 is " << result << endl;
result = (a >= b); cout << "3 >= 5 is " << result << endl;
result = (a <= b); cout << "3 <= 5 is " << result << endl;
return 0;
}
输出
3 == 5 is 0 3 != 5 is 1 3 > 5 is 0 3 < 5 is 1 3 >= 5 is 0 3 <= 5 is 1
4. 逻辑运算符
组合多个条件,结果为 true(1) 或 false(0)。
| 运算符 | 示例 | 含义 |
|---|---|---|
&& | expr1 && expr2 | 逻辑与:全真才真 |
|| | expr1 || expr2 | 逻辑或:一真即真 |
! | !expr | 逻辑非:真变假,假变真 |
真值表速查:
a=5, b=8 时: (a>3) && (b>5) → true (a>3) && (b<5) → false (a>3) || (b>5) → true (a>3) || (b<5) → true (a<3) || (b<5) → false !(a<3) → true !(a>3) → false
示例 5:逻辑运算符
#include <iostream>
using namespace std;
int main() {
bool result;
result = (3 != 5) && (3 < 5); cout << "(3 != 5) && (3 < 5) is " << result << endl;
result = (3 == 5) && (3 < 5); cout << "(3 == 5) && (3 < 5) is " << result << endl;
result = (3 == 5) && (3 > 5); cout << "(3 == 5) && (3 > 5) is " << result << endl;
result = (3 != 5) || (3 < 5); cout << "(3 != 5) || (3 < 5) is " << result << endl;
result = (3 != 5) || (3 > 5); cout << "(3 != 5) || (3 > 5) is " << result << endl;
result = (3 == 5) || (3 > 5); cout << "(3 == 5) || (3 > 5) is " << result << endl;
result = !(5 == 2); cout << "!(5 == 2) is " << result << endl;
result = !(5 == 5); cout << "!(5 == 5) is " << result << endl;
return 0;
}
输出
(3 != 5) && (3 < 5) is 1 (3 == 5) && (3 < 5) is 0 (3 == 5) && (3 > 5) is 0 (3 != 5) || (3 < 5) is 1 (3 != 5) || (3 > 5) is 1 (3 == 5) || (3 > 5) is 0 !(5 == 2) is 1 !(5 == 5) is 0
5. 位运算符
对整数二进制位逐位操作,仅适用 char、int 等整型。
| 运算符 | 描述 |
|---|---|
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
~ | 按位取反(一补数) |
<< | 左移 |
>> | 右移 |
详见 C++ 位运算符专题。
6. 其他常用运算符
| 运算符 | 描述 | 示例 |
|---|---|---|
sizeof | 返回类型/表达式字节大小 | sizeof(int); // 4 |
?: | 三元条件运算符 | string s = (5 > 0) ? "even" : "odd"; // "even" |
& | 取地址 | # // num 的地址 |
. | 结构体/类成员访问 | s1.marks = 92; |
-> | 指针成员访问 | ptr->marks = 92; |
<< | 输出流插入 | cout << 5; |
>> | 输入流提取 | cin >> num; |
, | 逗号运算符(顺序求值,取最后值) | int x = (a=1, b=2, a+b); // 3 |
.* / ->* | 成员指针访问 | 高级元编程 |
运算符优先级与结合性(核心避坑点)
高优先级先结合。常见易错点:
==优先级 低于&、|、^→a & b == 0实为a & (b == 0),需加括号(a & b) == 0&&优先级 高于||?:优先级 极低,赋值时常需括号:int x = cond ? a : b;正确,但x = cond ? a : b = c;解析为x = cond ? a : (b = c)- 后缀
++/--优先级 高于 前缀
建议:不确定时加括号,可读性优于炫技。
C语言