前言

这一节我们将学习运算符的的相关知识,可能会涉及到一些C++的基本语法以及C++变量类型、C++变量作用域、C++常量等的相关知识,如果你还有不明白的,请到C++基本语法C++变量类型C++变量作用域C++常量这里温故一下

C++运算符

在C++编程中,运算符就像是数学中的加减乘除符号,它们告诉计算机执行特定的操作。C++提供了很多这样的符号,我们可以将它们分为几大类:

  1. 算术运算符:就像我们在数学课上学的那样,用来做加法(+)、减法(-)、乘法(*)、除法(/)等计算的符号。

  2. 关系运算符:这些符号用来比较两个值,比如看一个值是否大于(>)、小于(<)、等于(==)另一个值。

  3. 逻辑运算符:这些符号用来处理真(true)或假(false)的情况,比如“并且”(&&)表示两个条件都必须为真,结果才为真;“或者”(||)表示只要有一个条件为真,结果就为真。

  4. 位运算符:这些符号在二进制层面上操作数据,比如将两个数的二进制表示进行“与”(&)、“或”(|)操作。

  5. 赋值运算符:这个符号(=)用来给变量赋值,比如将一个值赋给一个变量。

  6. 杂项运算符:还有一些其他的符号,比如访问对象成员的点(.)运算符,或者取地址的与(&)运算符。

接下来的内容会详细解释这些运算符是如何工作的,帮助你更好地理解如何在C++中使用它们。简而言之,运算符就是编程语言中的“动词”,它们告诉计算机要执行什么样的操作。

在学习 C++ 编程时,我们经常需要使用各种运算符来进行计算和逻辑判断。下面,我们来解释一下这些常见的运算符。


算术运算符

这些运算符用于基本的数学计算,就像我们日常生活中的加减乘除。

  • + 加号:把两个数相加。

    例子:A + B,如果 A 是 10,B 是 20,那么结果是 30

  • - 减号:从第一个数中减去第二个数。

    例子:A - B,结果是 -10

  • * 乘号:把两个数相乘。

    例子:A * B,结果是 200

  • / 除号:用第一个数除以第二个数。

    例子:B / A,结果是 2

  • % 取模:求两个整数相除的余数。

    例子:B % A,结果是 0

  • ++ 自增:把变量的值增加 1。

    例子:A++,如果 A 原本是 10,执行后变为 11

  • -- 自减:把变量的值减少 1。

    例子:A--,执行后 A 变为 9

示例程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;

int main()
{
int a = 21;
int b = 10;

cout << "a + b = " << a + b << endl; // 输出 31
cout << "a - b = " << a - b << endl; // 输出 11
cout << "a * b = " << a * b << endl; // 输出 210
cout << "a / b = " << a / b << endl; // 输出 2
cout << "a % b = " << a % b << endl; // 输出 1

int c = 10;
cout << "c++ = " << c++ << endl; // 输出 10,然后 c 变为 11
c = 10;
cout << "c-- = " << c-- << endl; // 输出 10,然后 c 变为 9

return 0;
}

关系运算符

这些运算符用于比较两个值之间的大小关系,结果是 真(true)假(false)

  • == 等于:判断两个值是否相等。

    例子:A == B,如果 A 是 10,B 是 20,结果为 false

  • != 不等于:判断两个值是否不相等。

    例子:A != B,结果为 true

  • > 大于:判断左边的值是否大于右边的值。

    例子:A > B,结果为 false

  • < 小于:判断左边的值是否小于右边的值。

    例子:A < B,结果为 true

  • >= 大于等于:判断左边的值是否大于或等于右边的值。

  • <= 小于等于:判断左边的值是否小于或等于右边的值。

示例程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
using namespace std;

int main()
{
int a = 21;
int b = 10;

if (a == b)
cout << "a 等于 b" << endl;
else
cout << "a 不等于 b" << endl;

if (a < b)
cout << "a 小于 b" << endl;
else
cout << "a 不小于 b" << endl;

if (a > b)
cout << "a 大于 b" << endl;
else
cout << "a 不大于 b" << endl;

a = 5;
b = 20;

if (a <= b)
cout << "a 小于或等于 b" << endl;

if (b >= a)
cout << "b 大于或等于 a" << endl;

return 0;
}

逻辑运算符

这些运算符用于连接多个条件,形成更复杂的逻辑判断。

  • && 逻辑与:当 两个条件都为真,结果才为真。

    例子:(A && B),只有当 AB 都为真,结果才为 true

  • || 逻辑或:当 至少一个条件为真,结果为真。

    例子:(A || B),只要 AB 其中一个为真,结果就是 true

  • ! 逻辑非:对条件取反,真变假,假变真

    例子:!(A && B),如果 (A && B) 为真,取反后结果为 false

示例程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;

int main()
{
int a = 5;
int b = 20;

if (a && b)
cout << "a 和 b 都为真" << endl;

if (a || b)
cout << "a 或 b 至少一个为真" << endl;

a = 0;
b = 10;

if (a && b)
cout << "a 和 b 都为真" << endl;
else
cout << "a 和 b 不全为真" << endl;

if (!(a && b))
cout << "a 和 b 不全为真(取反后为真)" << endl;

return 0;
}

位运算符

位运算符用于直接操作二进制位,常用于底层编程或性能优化。

  • & 按位与:对应位都为 1,结果才为 1。

  • | 按位或:对应位只要有一个为 1,结果就是 1。

  • ^ 按位异或:对应位不同,结果为 1,相同为 0。

  • ~ 按位取反:把每一位都取反,0 变 1,1 变 0。

  • << 左移:把二进制位向左移动,右边补 0。

  • >> 右移:把二进制位向右移动,左边根据符号位补 0 或 1。

示例程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
using namespace std;

int main()
{
unsigned int a = 60; // 二进制:0011 1100
unsigned int b = 13; // 二进制:0000 1101
int c = 0;

c = a & b; // 12,二进制:0000 1100
cout << "a & b = " << c << endl;

c = a | b; // 61,二进制:0011 1101
cout << "a | b = " << c << endl;

c = a ^ b; // 49,二进制:0011 0001
cout << "a ^ b = " << c << endl;

c = ~a; // 对 a 取反
cout << "~a = " << c << endl;

c = a << 2; // 左移 2 位
cout << "a << 2 = " << c << endl;

c = a >> 2; // 右移 2 位
cout << "a >> 2 = " << c << endl;

return 0;
}

赋值运算符

这些运算符用于给变量赋值,并可以结合其他操作。

  • = 赋值:把右边的值赋给左边的变量。

    例子:c = a + b

  • += 加且赋值c += a 等同于 c = c + a

  • -= 减且赋值c -= a 等同于 c = c - a

  • *= 乘且赋值c *= a 等同于 c = c * a

  • /= 除且赋值c /= a 等同于 c = c / a

  • %= 取模且赋值c %= a 等同于 c = c % a

  • <<= 左移且赋值c <<= 2 等同于 c = c << 2

  • >>= 右移且赋值c >>= 2 等同于 c = c >> 2

  • &= 按位与且赋值c &= 2 等同于 c = c & 2

  • ^= 按位异或且赋值c ^= 2 等同于 c = c ^ 2

  • |= 按位或且赋值c |= 2 等同于 c = c | 2

示例程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
using namespace std;

int main()
{
int a = 21;
int c;

c = a;
cout << "c = " << c << endl; // 输出 21

c += a;
cout << "c += a,c = " << c << endl; // 输出 42

c -= a;
cout << "c -= a,c = " << c << endl; // 输出 21

c *= a;
cout << "c *= a,c = " << c << endl; // 输出 441

c /= a;
cout << "c /= a,c = " << c << endl; // 输出 21

c = 200;
c %= a;
cout << "c %= a,c = " << c << endl; // 输出 11

c <<= 2;
cout << "c <<= 2,c = " << c << endl; // 输出 44

c >>= 2;
cout << "c >>= 2,c = " << c << endl; // 输出 11

c &= 2;
cout << "c &= 2,c = " << c << endl; // 输出 2

c ^= 2;
cout << "c ^= 2,c = " << c << endl; // 输出 0

c |= 2;
cout << "c |= 2,c = " << c << endl; // 输出 2

return 0;
}

其他运算符

  • sizeof 求大小:返回数据类型或变量所占的字节数。

    例子:sizeof(int) 返回 4

  • ?: 条件运算符(三目运算符):根据条件返回不同的值。

    例子:int max = (a > b) ? a : b;,如果 a > b 为真,max 等于 a,否则等于 b

  • , 逗号运算符:可以在一行中执行多个表达式,返回最后一个表达式的值。

  • .-> 成员访问运算符:用于访问对象或指针的成员。

    例子:object.memberpointer->member

  • (type) 类型转换:将一个值转换为指定的类型。

    例子:int x = (int)3.14;x 的值为 3

  • & 取地址运算符:获取变量的内存地址。

    例子:int *p = &a;p 指向 a 的地址。

  • * 指针解引用运算符:访问指针所指向的变量的值。

    例子:int value = *p;value 等于 p 所指向的变量的值。