一、表达式的概念
表达式可以理解为用于计算的公式,它由运算符(如 + – * /)、运算量(也称为操作数,可以是常量、变量)和括号组成。执行运算后得到的结果就是表达式的值。
例如 a + b、x / y 都是表达式。单独一个变量 a 或常量 1 也是表达式。
二、运算符概述
C++提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符等。
运算符的基本形式通常为:
操作数1 运算符 操作数2
例如 1 + a。
根据所需操作数的个数,运算符分为:
二元运算符:需要两个操作数,如 +、-、*、/。
一元运算符:只需要一个操作数,如 ++、–、负号 -。
三、运算符的优先级和结合性
如果一个表达式包含多个运算符,运算顺序是:
先执行优先级高的运算符,再执行优先级低的运算符。
当多个运算符优先级相同时,按照结合性的方向进行计算。结合性分为左结合(从左到右)和右结合(从右到左)。
例如表达式 a + b – c,+ 和 – 优先级相同,结合性为左结合,因此先计算 a + b,再用结果减去 c。
四、算术运算符
算术运算符用于执行基本的数学运算,包括:
| 运算符 | 含义 | 示例 |
|---|---|---|
| + | 加法 | a + b |
| – | 减法 | a – b |
| * | 乘法 | a * b |
| / | 除法 | a / b |
| % | 取余(模运算) | a % b |
注意:两个整数相除,结果仍为整数,舍弃小数部分。例如 5 / 2 结果为 2。如果其中一个操作数为浮点数,则结果为浮点数。取余运算 % 仅适用于整数类型。
五、关系运算符
关系运算符用于比较两个操作数的大小关系,结果为 bool 类型(true 或 false):
| 运算符 | 含义 | 示例 |
|---|---|---|
| > | 大于 | a > b |
| < | 小于 | a < b |
| >= | 大于等于 | a >= b |
| <= | 小于等于 | a <= b |
| == | 等于 | a == b |
| != | 不等于 | a != b |
六、逻辑运算符
逻辑运算符用于组合或取反布尔值,包括:
| 运算符 | 含义 | 示例 |
|---|---|---|
| ! | 逻辑非(一元) | !a |
| && | 逻辑与 | a && b |
| || | 逻辑或 | a || b |
逻辑与:两个操作数都为 true 时结果才为 true。逻辑或:两个操作数至少有一个为 true 时结果为 true。逻辑非:对操作数取反。
注意:逻辑与和逻辑或具有短路求值特性。对于 a && b,如果 a 为 false,则不再计算 b。对于 a || b,如果 a 为 true,则不再计算 b。
七、赋值运算符
赋值运算符用于将右侧表达式的值赋给左侧的变量:
| 运算符 | 含义 | 示例 |
|---|---|---|
| = | 简单赋值 | a = b |
| += | 加后赋值 | a += b 等价于 a = a + b |
| -= | 减后赋值 | a -= b 等价于 a = a – b |
| *= | 乘后赋值 | a *= b 等价于 a = a * b |
| /= | 除后赋值 | a /= b 等价于 a = a / b |
| %= | 取余后赋值 | a %= b 等价于 a = a % b |
八、自增和自减运算符
自增(++)和自减(–)是一元运算符,用于将变量的值加 1 或减 1。
前缀形式:++a、–a。先自增(自减),再使用变量的值。
后缀形式:a++、a–。先使用变量的值,再自增(自减)。
示例:
int a = 5;
int b = ++a; // a先变为6,b被赋值为6
int c = 5;
int d = c++; // d被赋值为5,然后c变为6Code language: JavaScript (javascript)
九、条件运算符(三目运算符)
条件运算符是C++中唯一的三元运算符,形式为:
条件 ? 表达式1 : 表达式2
如果条件为 true,则整个表达式取表达式1的值;否则取表达式2的值。
示例:
int max = (a > b) ? a : b; // 取a和b中的较大值Code language: JavaScript (javascript)
十、代码示例
以下代码演示了各类运算符和表达式的使用:
#include <iostream>
using namespace std;
int main()
{
// 算术运算符
int a = 10, b = 3;
cout << "a + b = " << a + b << endl;
cout << "a - b = " << a - b << endl;
cout << "a * b = " << a * b << endl;
cout << "a / b = " << a / b << endl; // 整数除法,结果为3
cout << "a % b = " << a % b << endl; // 取余,结果为1
// 关系运算符
cout << "a > b : " << (a > b) << endl; // 输出1(true)
cout << "a == b : " << (a == b) << endl; // 输出0(false)
// 逻辑运算符
bool x = true, y = false;
cout << "x && y : " << (x && y) << endl; // 输出0
cout << "x || y : " << (x || y) << endl; // 输出1
cout << "!x : " << !x << endl; // 输出0
// 赋值运算符
int c = 5;
c += 2; // 等价于 c = c + 2
cout << "c after += 2 : " << c << endl; // 输出7
// 自增自减
int d = 5;
cout << "++d = " << ++d << endl; // 先自增,输出6
d = 5;
cout << "d++ = " << d++ << endl; // 先使用,输出5
cout << "d after d++ = " << d << endl; // 输出6
// 条件运算符
int max = (a > b) ? a : b;
cout << "max of a and b = " << max << endl;
// 表达式组合
int result = (a + b) * 2 - (a % b);
cout << "result = " << result << endl;
return 0;
}Code language: PHP (php)
十一、小结
- 表达式是由运算符、操作数和括号组成的计算式,有确定的值。
- 运算符按操作数个数分为一元、二元和三元运算符。
- 运算符有优先级和结合性,决定表达式的计算顺序。
- 常见运算符包括算术、关系、逻辑、赋值、自增自减和条件运算符。
- 整数除法会舍弃小数部分,取余运算仅适用于整数。
- 自增自减的前缀和后缀形式对表达式的值有影响。
- 逻辑与和逻辑或具有短路求值特性。