LogoCSP Wiki By Yundou
基础知识

数学运算符和优先级

运算符的概念

在数学里我们会用加、减、乘、除这些符号来进行计算,在编程里也有类似的符号,叫做运算符。运算符可以对数据进行各种操作,就像我们用工具来完成不同的事情一样。本文我们来学习C++里常用的单目、双目运算符。

单目运算符

单目运算符只需要一个操作数,就好像一个人就能完成的事情。

负号运算符(-)

这个运算符可以把一个数变成它的相反数。比如原来是正数,用了负号运算符就变成负数;原来是负数,就变成正数。

#include <iostream>
using namespace std;
 
int main() {
    int num = 5;  // 定义一个整数变量num,初始值为5
    int result = -num;  // 使用负号运算符,把num变成它的相反数
    cout << "5的相反数是: " << result << endl;  // 输出结果
 
    return 0;
}

在这个例子中,num 的值是 5,使用负号运算符后,result 的值就变成了 -5

自增运算符(++)

自增运算符可以让变量的值增加1。它有两种形式:前置自增(++变量名)和后置自增(变量名++)。前置自增是先把变量的值加1,再使用变量的值;后置自增是先使用变量的值,再把变量的值加1。

#include <iostream>
using namespace std;
 
int main() {
    int a = 5;  // 定义一个整数变量a,初始值为5
    int b = ++a;  // 前置自增,先把a的值加1,再把a的值赋给b
    cout << "前置自增后,a的值是: " << a << ", b的值是: " << b << endl;
 
    int c = 5;  // 重新定义一个整数变量c,初始值为5
    int d = c++;  // 后置自增,先把c的值赋给d,再把c的值加1
    cout << "后置自增后,c的值是: " << c << ", d的值是: " << d << endl;
 
    return 0;
}

在这个例子中,前置自增后,a 的值变成了 6b 的值也是 6;后置自增后,c 的值变成了 6,但 d 的值是 5

自减运算符(--)

自减运算符可以让变量的值减少1。它也有前置自减(--变量名)和后置自减(变量名--)两种形式,用法和自增运算符类似。

#include <iostream>
using namespace std;
 
int main() {
    int a = 5;  // 定义一个整数变量a,初始值为5
    int b = --a;  // 前置自减,先把a的值减1,再把a的值赋给b
    cout << "前置自减后,a的值是: " << a << ", b的值是: " << b << endl;
 
    int c = 5;  // 重新定义一个整数变量c,初始值为5
    int d = c--;  // 后置自减,先把c的值赋给d,再把c的值减1
    cout << "后置自减后,c的值是: " << c << ", d的值是: " << d << endl;
 
    return 0;
}

在这个例子中,前置自减后,a 的值变成了 4b 的值也是 4;后置自减后,c 的值变成了 4,但 d 的值是 5

双目运算符

双目运算符需要两个操作数,就好像需要两个人一起完成的事情。

加法运算符(+)

加法运算符可以把两个数相加。

#include <iostream>
using namespace std;
 
int main() {
    int a = 3;  // 定义一个整数变量a,初始值为3
    int b = 5;  // 定义一个整数变量b,初始值为5
    int result = a + b;  // 使用加法运算符,把a和b相加
    cout << "3 + 5 的结果是: " << result << endl;  // 输出结果
 
    return 0;
}

在这个例子中,a 的值是 3b 的值是 5,使用加法运算符后,result 的值是 8

减法运算符(-)

减法运算符可以用一个数减去另一个数。

#include <iostream>
using namespace std;
 
int main() {
    int a = 8;  // 定义一个整数变量a,初始值为8
    int b = 3;  // 定义一个整数变量b,初始值为3
    int result = a - b;  // 使用减法运算符,用a减去b
    cout << "8 - 3 的结果是: " << result << endl;  // 输出结果
 
    return 0;
}

在这个例子中,a 的值是 8b 的值是 3,使用减法运算符后,result 的值是 5

乘法运算符(*)

乘法运算符可以把两个数相乘。

#include <iostream>
using namespace std;
 
int main() {
    int a = 4;  // 定义一个整数变量a,初始值为4
    int b = 6;  // 定义一个整数变量b,初始值为6
    int result = a * b;  // 使用乘法运算符,把a和b相乘
    cout << "4 * 6 的结果是: " << result << endl;  // 输出结果
 
    return 0;
}

在这个例子中,a 的值是 4b 的值是 6,使用乘法运算符后,result 的值是 24

除法运算符(/)

除法运算符可以用一个数除以另一个数。要注意,如果两个操作数都是整数,结果会只保留整数部分。

#include <iostream>
using namespace std;
 
int main() {
    int a = 10;  // 定义一个整数变量a,初始值为10
    int b = 3;  // 定义一个整数变量b,初始值为3
    int result = a / b;  // 使用除法运算符,用a除以b
    cout << "10 / 3 的结果是: " << result << endl;  // 输出结果
 
    return 0;
}

在这个例子中,a 的值是 10b 的值是 3,使用除法运算符后,result 的值是 3,因为只保留了整数部分。

取模运算符(%)

取模运算符可以得到两个数相除的余数。

#include <iostream>
using namespace std;
 
int main() {
    int a = 10;  // 定义一个整数变量a,初始值为10
    int b = 3;  // 定义一个整数变量b,初始值为3
    int result = a % b;  // 使用取模运算符,得到a除以b的余数
    cout << "10 % 3 的结果是: " << result << endl;  // 输出结果
 
    return 0;
}

在这个例子中,a 的值是 10b 的值是 3,使用取模运算符后,result 的值是 1,因为 10 除以 3 的余数是 1

运算符的优先级

以下是C++中相关运算符的优先级表,按从高到低排列:

优先级运算符名称/描述结合性
1++(后置)、--(后置)后置自增/自减从左到右
2++(前置)、--(前置)、+(正号)、-(负号)前置自增/自减、单目运算符从右到左
3*/%乘法、除法、取模从左到右
4+(加法)、-(减法)双目加法、减法从左到右

详细说明:

  1. 后置自增/自减 (a++, a--)
    优先级最高,先返回当前值,再对操作数进行自增/自减。

    int a = 5;
    int b = a++ * 2;  // b = 5*2=10,然后 a=6
  2. 前置自增/自减 (++a, --a) 和单目运算符 (+a, -a)
    先对操作数进行自增/自减或符号运算,再返回结果。

    int a = 5;
    int b = ++a * 2;  // a=6,b=6*2=12
    int c = -a;       // c = -6
  3. 乘法、除法、取模 (*, /, %)
    从左到右结合,先计算乘除/取模,再处理加减。

    int a = 5 + 3 * 2;  // 3*2=6,5+6=11
  4. 双目加法、减法 (+, -)
    最低优先级,从左到右结合。

    int a = 10 - 3 + 2;  // (10-3)=7,7+2=9

示例验证:

int a = 5;
int b = -a++ * 3 + 2;  
// 等效于:(-(a++)) * 3 + 2 → (-5)*3 + 2 = -15 + 2 = -13(a最终为6)
int a = 5;
int b = ++a * -a;  
// 等效于:(++a) * (-a) → a先自增到6,然后 6 * (-6) = -36

例题

On this page