Appearance
C++ 运算符
运算符是对数据进行操作的符号。C++ 提供了丰富的运算符,用于完成算术运算、比较大小、逻辑判断、位运算等任务。
算术运算符
算术运算符用于执行常见的数学运算。
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
+ | 加法 | 5 + 3 | 8 |
- | 减法 | 5 - 3 | 2 |
* | 乘法 | 5 * 3 | 15 |
/ | 除法 | 5 / 3 | 1(整数除法) |
% | 取模 | 5 % 3 | 2 |
整数除法与浮点除法
当两个整数相除时,结果会舍去小数部分:
cpp
int a = 5 / 3; // a = 1如果参与运算的数有一个是浮点数,结果就会保留小数:
cpp
double b = 5.0 / 3; // b = 1.66667取模运算
取模运算 % 返回除法的余数,只能用于整数:
cpp
int r = 17 % 5; // r = 2取模运算常用于判断奇偶性:
cpp
int n = 8;
if (n % 2 == 0)
{
cout << n << " 是偶数" << endl;
}关系运算符
关系运算符用于比较两个值,结果为 true 或 false。
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
== | 等于 | 5 == 3 | false |
!= | 不等于 | 5 != 3 | true |
> | 大于 | 5 > 3 | true |
< | 小于 | 5 < 3 | false |
>= | 大于等于 | 5 >= 5 | true |
<= | 小于等于 | 5 <= 3 | false |
注意区分赋值运算符 = 和等于运算符 ==:
cpp
int a = 5;
if (a == 5) // 正确:判断 a 是否等于 5
{
cout << "a 等于 5" << endl;
}
// if (a = 5) // 错误:这是赋值,不是比较逻辑运算符
逻辑运算符用于连接多个条件判断。
| 运算符 | 含义 | 示例 |
|---|---|---|
&& | 逻辑与 | a > 0 && b > 0 |
|| | 逻辑或 | a > 0 || b > 0 |
! | 逻辑非 | !isReady |
逻辑与
当两个条件都成立时,结果才为真:
cpp
int age = 20;
bool hasTicket = true;
if (age >= 18 && hasTicket)
{
cout << "可以入场" << endl;
}逻辑或
只要有一个条件成立,结果就为真:
cpp
bool isMember = true;
bool hasCoupon = false;
if (isMember || hasCoupon)
{
cout << "可以享受优惠" << endl;
}逻辑非
对条件取反:
cpp
bool isClosed = false;
if (!isClosed)
{
cout << "门是开着的" << endl;
}赋值运算符
赋值运算符用于给变量赋值。
| 运算符 | 含义 | 示例 | 等价于 |
|---|---|---|---|
= | 赋值 | a = 5 | — |
+= | 加后赋值 | a += 3 | a = a + 3 |
-= | 减后赋值 | a -= 3 | a = a - 3 |
*= | 乘后赋值 | a *= 3 | a = a * 3 |
/= | 除后赋值 | a /= 3 | a = a / 3 |
%= | 取模后赋值 | a %= 3 | a = a % 3 |
复合赋值运算符可以让代码更简洁:
cpp
int score = 10;
score += 5; // score 变为 15
score *= 2; // score 变为 30自增与自减运算符
++ 让变量加 1,-- 让变量减 1。
cpp
int count = 0;
count++; // count 变为 1
count--; // count 变回 0它们有前缀和后缀两种形式:
cpp
int a = 5;
int b = ++a; // 先自增,再赋值:a = 6, b = 6
int c = 5;
int d = c++; // 先赋值,再自增:d = 5, c = 6在单独使用时,前缀和后缀没有区别。在表达式中使用时,要注意它们的区别。
位运算符
位运算符直接对整数的二进制位进行操作。
| 运算符 | 含义 | 示例 |
|---|---|---|
& | 按位与 | 5 & 3 |
| | 按位或 | 5 | 3 |
^ | 按位异或 | 5 ^ 3 |
~ | 按位取反 | ~5 |
<< | 左移 | 5 << 1 |
>> | 右移 | 5 >> 1 |
例如,数字 5 的二进制是 101,数字 3 的二进制是 011:
cpp
int a = 5 & 3; // 001,即 1
int b = 5 | 3; // 111,即 7
int c = 5 ^ 3; // 110,即 6左移一位相当于乘以 2,右移一位相当于除以 2:
cpp
int x = 5 << 1; // 10
int y = 5 >> 1; // 2位运算在底层开发、权限控制、压缩存储等场景中非常有用。
三元运算符
三元运算符 ?: 可以根据条件选择两个值中的一个。
cpp
int a = 10;
int b = 20;
int max = (a > b) ? a : b; // 如果 a > b,max = a,否则 max = b它等价于:
cpp
int max;
if (a > b)
{
max = a;
}
else
{
max = b;
}三元运算符适合简单的条件赋值,能让代码更紧凑。
sizeof 运算符
sizeof 用于获取类型或变量占用的字节数。
cpp
cout << sizeof(int) << endl; // 输出 int 的大小
cout << sizeof(3.14) << endl; // 输出 double 的大小运算符优先级
当表达式中有多个运算符时,优先级决定了运算顺序。常见优先级从高到低:
- 括号
() - 自增自减
++、-- - 算术运算符
*、/、%,然后+、- - 关系运算符
<、>、<=、>=,然后==、!= - 逻辑与
&& - 逻辑或
|| - 赋值运算符
=、+=等
如果不确定优先级,就加括号,这样代码更清晰:
cpp
int result = (a + b) * c / (d - e);完整示例
cpp
#include <iostream>
using namespace std;
int main()
{
int a = 17;
int b = 5;
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;
cout << "a > b: " << (a > b) << endl;
cout << "a == b: " << (a == b) << endl;
bool condition = (a > 10) && (b < 10);
cout << "条件结果:" << condition << endl;
return 0;
}运行结果:
text
a + b = 22
a - b = 12
a * b = 85
a / b = 3
a % b = 2
a > b: 1
a == b: 0
条件结果:1