C++中的运算符是用于执行各种运算操作的符号,按照功能可以分为算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其他运算符六大类,不同类别的运算符对应不同的使用场景。

一、算术运算符
算术运算符用于完成基本的数学运算,常见的符号及功能如下:
| 符号 | 名称 | 功能说明 | 示例 |
|---|---|---|---|
| + | 加法运算符 | 计算两个操作数的和 | int a = 1 + 2; // a的值为3 |
| - | 减法运算符 | 计算两个操作数的差 | int b = 5 - 3; // b的值为2 |
| * | 乘法运算符 | 计算两个操作数的乘积 | int c = 2 * 4; // c的值为8 |
| / | 除法运算符 | 计算两个操作数的商,整数相除结果取整 | int d = 7 / 2; // d的值为3 |
| % | 取模运算符 | 计算两个整数相除的余数,仅适用于整数类型 | int e = 7 % 2; // e的值为1 |
| ++ | 自增运算符 | 操作数的值加1,分为前置和后置两种形式 | int f = 1; int g = ++f; // f=2,g=2 |
| -- | 自减运算符 | 操作数的值减1,分为前置和后置两种形式 | int h = 3; int i = h--; // h=2,i=3 |
二、关系运算符
关系运算符用于比较两个操作数的大小或相等关系,运算结果为布尔值true或false,常见符号如下:
- >:大于,判断左侧操作数是否大于右侧
- <:小于,判断左侧操作数是否小于右侧
- >=:大于等于,判断左侧操作数是否大于或等于右侧
- <=:小于等于,判断左侧操作数是否小于或等于右侧
- ==:等于,判断两个操作数是否相等
- !=:不等于,判断两个操作数是否不相等
关系运算符的使用示例如下:
#include <iostream>
using namespace std;
int main() {
int x = 5;
int y = 10;
cout << (x > y) << endl; // 输出0,表示false
cout << (x != y) << endl; // 输出1,表示true
return 0;
}
三、逻辑运算符
逻辑运算符用于组合多个条件判断,得到最终的逻辑结果,常见符号包括:
- &&:逻辑与,两侧条件都为true时结果才为true,短路特性:左侧为false时右侧不再计算
- ||:逻辑或,两侧条件至少有一个为true时结果为true,短路特性:左侧为true时右侧不再计算
- !:逻辑非,对条件的布尔值取反,true变false,false变true
逻辑运算符的代码示例:
#include <iostream>
using namespace std;
int main() {
int score = 85;
// 判断分数是否在60到100之间
bool isPass = score >= 60 && score <= 100;
cout << isPass << endl; // 输出1
cout << !isPass << endl; // 输出0
return 0;
}
四、位运算符
位运算符直接对整数的二进制位进行操作,仅适用于整型数据,常见符号如下:
| 符号 | 名称 | 功能说明 | 示例(假设a=60二进制00111100,b=13二进制00001101) |
|---|---|---|---|
| & | 按位与 | 两个二进制位都为1时结果位为1,否则为0 | a & b = 12(二进制00001100) |
| | | 按位或 | 两个二进制位至少有一个为1时结果位为1 | a | b = 61(二进制00111101) |
| ^ | 按位异或 | 两个二进制位不同时结果位为1,相同时为0 | a ^ b = 49(二进制00110001) |
| ~ | 按位取反 | 对二进制位逐位取反,0变1,1变0 | ~a = -61(二进制11000011,补码形式) |
| << | 左移 | 二进制位全部左移指定位数,高位丢弃,低位补0 | a << 2 = 240(二进制11110000) |
| >> | 右移 | 二进制位全部右移指定位数,正数高位补0,负数高位补1 | a >> 2 = 15(二进制00001111) |
五、赋值运算符
赋值运算符用于给变量赋值,基础赋值运算符是=,同时还有复合赋值运算符,常见类型如下:
- =:基础赋值,将右侧的值赋给左侧的变量
- +=:加赋值,等价于变量 = 变量 + 值
- -=:减赋值,等价于变量 = 变量 - 值
- *=:乘赋值,等价于变量 = 变量 * 值
- /=:除赋值,等价于变量 = 变量 / 值
- %=:取模赋值,等价于变量 = 变量 % 值
- <<=:左移赋值,等价于变量 = 变量 << 位数
- >>=:右移赋值,等价于变量 = 变量 >> 位数
- &=:按位与赋值,等价于变量 = 变量 & 值
- ^=:按位异或赋值,等价于变量 = 变量 ^ 值
- |=:按位或赋值,等价于变量 = 变量 | 值
赋值运算符的使用示例:
#include <iostream>
using namespace std;
int main() {
int num = 10;
num += 5; // 等价于num = num + 5,num变为15
num *= 2; // 等价于num = num * 2,num变为30
cout << num << endl; // 输出30
return 0;
}
六、其他常见运算符
除了上述几类运算符,C++中还有一些其他常用符号:
- sizeof:求字节数运算符,返回数据类型或变量占用的内存字节数
- ?::条件运算符(三目运算符),语法为条件 ? 表达式1 : 表达式2,条件为true返回表达式1的值,否则返回表达式2的值
- ,:逗号运算符,按顺序执行多个表达式,最终结果为最后一个表达式的值
- .* 和 ->*:成员指针运算符,用于访问对象的成员指针
- :::作用域解析运算符,用于访问命名空间、类、结构体的成员
- ->:箭头运算符,通过指针访问对象的成员,等价于(*指针).成员
- &:取地址运算符,获取变量的内存地址;同时也可作为引用声明符
- *:解引用运算符,获取指针指向地址的变量值
其他运算符的代码示例:
#include <iostream>
using namespace std;
int main() {
int val = 10;
// sizeof运算符
cout << sizeof(val) << endl; // 输出4(32位环境int占4字节)
// 条件运算符
int max = (val > 5) ? val : 5;
cout << max << endl; // 输出10
// 逗号运算符
int res = (val += 2, val * 3);
cout << res << endl; // 输出36,val先变为12,再计算12*3
return 0;
}
七、运算符优先级说明
当表达式中包含多个运算符时,优先级高的运算符先执行,优先级相同则按照结合性(从左到右或从右到左)执行。常见优先级从高到低大致为:括号 > 自增自减 > 算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。实际编写代码时,如果不确定优先级,可以通过加括号的方式明确执行顺序,避免逻辑错误。