C++系列七:表达式

简介: C++系列七:表达式


1. 表达式类型

在C++中,表达式可以分为多种类型,每种类型都有不同的使用方式和语法规则。

(1)算术表达式

算术表达式是最基本的表达式类型之一,用于执行加、减、乘、除和取模等算术运算。

e.g.

int a = 5, b = 3;
float c = 2.5;
int d = a + b;   // 结果为8
int e = a - b;   // 结果为2
int f = a * b;   // 结果为15
int g = a / b;   // 结果为1
int h = a % b;   // 结果为2
float i = a + c; // 结果为7.5

(2)关系表达式

关系表达式用于比较两个值的大小、相等性和不等性。

e.g.

int a = 5, b = 3;
bool c = a < b;    // 结果为false
bool d = a > b;    // 结果为true
bool e = a == b;   // 结果为false
bool f = a != b;   // 结果为true

(3)逻辑表达式

逻辑表达式用于执行布尔逻辑运算。

e.g.

int a = 5, b = 3;
bool c = (a < b) && (a > 0);     // 结果为false
bool d = (a > b) || (b < 0);     // 结果为true
bool e = !(a == b);              // 结果为true

(4)位表达式

位表达式主要用于在二进制位级别上执行操作。

e.g.

int a = 5, b = 3;
int c = a & b;      // 结果为1
int d = a | b;      // 结果为7
int e = ~a;         // 结果为-6
int f = a << 2;     // 结果为20
int g = b >> 1;     // 结果为1

(5)条件表达式

条件表达式也称为三目运算符,用于根据条件选择两个不同的值。它的语法如下:

condition ? true_expression : false_expression

如果条件为真,则计算true_expression的值;否则计算false_expression的值。

e.g.

int a = 5, b = 3;
int c = (a > b) ? a : b;   // 如果a大于b,则c等于a;否则c等于b

(6)赋值表达式

赋值表达式用于将一个值赋给一个变量。它的基本形式如下:

variable = expression;

C++还支持多种复合赋值运算符,例如+=-=*=/=等,这些运算符可以使代码更加简洁和易读。

int a = 5, b = 3;
a = b;        // 将b的值赋给a
a += 2;       // 将2加到a中
b *= 3;       // 将3乘到b中

2. 表达式优先级

在C++中,不同运算符具有不同的优先级。这意味着某些运算符比其他运算符更先执行。例如,在算术表达式中,乘法和除法运算符比加法和减法运算符具有更高的优先级。

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

  • ():括号
  • []:数组下标
  • .->:成员选择
  • ++--:前缀递增和递减
  • +-:正负号
  • !~:逻辑非和按位取反
  • */%:乘法、除法和取模
  • +-:加法和减法
  • <<>>:左移和右移
  • <<=>>=:关系运算符
  • ==!=:相等和不等运算符
  • &:按位与
  • ^:按位异或
  • |:按位或
  • &&:逻辑与
  • ||:逻辑或
  • ?::条件运算符
  • =+=-=*=/=%=:赋值运算符
  • ,:逗号

在表达式中,可以使用括号来改变运算符的优先级。例如,以下表达式会先计算乘法和除法运算符,然后再计算加法和减法运算符:

int a = 5, b = 3, c = 2;
int d = (a + b) * c / a;   // 计算步骤为:(5 + 3) * 2 / 5 = 2

3. 表达式计算顺序

在C++中,表达式的计算顺序是未定义的。这意味着编译器可以任意决定何时计算表达式中的各个部分。虽然不同的编译器可能会有不同的计算顺序,但通常情况下,表达式的计算顺序遵循以下规则:

  • 先计算所有的括号表达式。
  • 先计算所有的前缀递增和递减运算符。
  • 先计算所有的乘法、除法和取模运算符。
  • 先计算所有的加法和减法运算符。
  • 先计算所有的移位运算符。
  • 先计算所有的关系运算符。
  • 先计算所有的相等和不等运算符。
  • 先计算所有的按位与运算符。
  • 先计算所有的按位异或运算符。
  • 先计算所有的按位或运算符。
  • 最后计算所有的逻辑运算符。

需注意的是,某些情况下对于表达式中的多个操作数,编译器可能会使用特定的寄存器来保存它们,以提高代码的执行效率。这种情况下,表达式的计算顺序可能会更加复杂,因为编译器需要考虑如何最大限度地利用可用的寄存器。

相关文章
|
2月前
|
算法 编译器 C++
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits 判断 Lambda表达式类型?
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits 判断 Lambda表达式类型?
42 4
|
2月前
|
C++
【C/C++ 编程 入门篇】 if条件判断表达式的使用教程
https://developer.aliyun.com/article/1465430
20 0
|
7天前
|
Java 编译器 Linux
【C++11(二)】lambda表达式以及function包装器
【C++11(二)】lambda表达式以及function包装器
|
20天前
|
编译器 C语言 C++
C++ lambda表达式
C++ lambda表达式
|
20天前
|
算法 编译器 C++
C++中的lambda表达式
C++中的lambda表达式
5 0
|
2月前
|
算法 安全 编译器
【C++ 17 新特性 折叠表达式 fold expressions】理解学习 C++ 17 折叠表达式 的用法
【C++ 17 新特性 折叠表达式 fold expressions】理解学习 C++ 17 折叠表达式 的用法
25 1
|
2月前
|
算法 程序员 编译器
C ++匿名函数:揭开C++ Lambda表达式的神秘面纱
C ++匿名函数:揭开C++ Lambda表达式的神秘面纱
59 0
|
2月前
|
存储 JavaScript 前端开发
c++lambda函数与表达式
c++lambda函数与表达式
9 1
|
3月前
|
C++
【c++】定位new表达式(placement-new)
【c++】定位new表达式(placement-new)
【c++】定位new表达式(placement-new)
|
3月前
|
存储 算法 编译器
C++ 新特性 lamada表达式
C++ 新特性 lamada表达式