Skip to content

C++ 运算符

运算符是对数据进行操作的符号。C++ 提供了丰富的运算符,用于完成算术运算、比较大小、逻辑判断、位运算等任务。

算术运算符

算术运算符用于执行常见的数学运算。

运算符含义示例结果
+加法5 + 38
-减法5 - 32
*乘法5 * 315
/除法5 / 31(整数除法)
%取模5 % 32

整数除法与浮点除法

当两个整数相除时,结果会舍去小数部分:

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;
}

关系运算符

关系运算符用于比较两个值,结果为 truefalse

运算符含义示例结果
==等于5 == 3false
!=不等于5 != 3true
>大于5 > 3true
<小于5 < 3false
>=大于等于5 >= 5true
<=小于等于5 <= 3false

注意区分赋值运算符 = 和等于运算符 ==

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 += 3a = a + 3
-=减后赋值a -= 3a = a - 3
*=乘后赋值a *= 3a = a * 3
/=除后赋值a /= 3a = a / 3
%=取模后赋值a %= 3a = 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 的大小

运算符优先级

当表达式中有多个运算符时,优先级决定了运算顺序。常见优先级从高到低:

  1. 括号 ()
  2. 自增自减 ++--
  3. 算术运算符 */%,然后 +-
  4. 关系运算符 <><=>=,然后 ==!=
  5. 逻辑与 &&
  6. 逻辑或 ||
  7. 赋值运算符 =+=

如果不确定优先级,就加括号,这样代码更清晰:

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

Built with VitePress · Koyuki Palace