Logo成贤计协指南

运算符

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

上述例中,aa != 0 都是有效的判断条件。


4. 赋值运算符

赋值运算符用于给变量赋值或进行复合赋值。

运算符名称示例说明
=赋值a = b将 b 的值赋给 a
++自增a++将 a 的值增加 1
--自减a--将 a 的值减少 1
+=加等于a += ba = a + b 的简写
-=减等于a -= ba = a - b 的简写
*=乘等于a *= ba = a * b 的简写
/=除等于a /= ba = a / b 的简写
%=取余等于a %= ba = a % b 的简写
a++;
++b;
a += 1;
b *= 2;
c /= 1;

上面的例子中,a++++b 都是自增运算符,分别表示将变量 ab 的值增加 1。a += 1 表示将变量 a 的值增加 1,相当于 a = a + 1b *= 2 表示将变量 b 的值乘以 2,相当于 b = b * 2c /= 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, 然后输出 2

a++ 会先进行输出,然后自增,而 ++b 会先自增,然后输出。


5. 位运算符

位运算符用于对整数的二进制位进行操作。

运算符名称示例说明
&按位与a & b对应位都为1则为1
|按位或a | b对应位有1则为1
^按位异或a ^ b对应位不同则为1
~按位取反~a0变1,1变0
<<左移a << n左移 n 位
>>右移a >> n右移 n 位

这个今后有机会会提到。


6. 成员运算符

成员运算符用于访问对象或指针的成员。

运算符名称示例说明
.点号obj.value访问对象成员
->箭头ptr->value访问指针对象成员

这会在后面的 structclass 等等时候会提到。


运算符优先级

在 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