C++ 中的运算符优先级和结合性
本文将讨论 C++ 中的运算符以及它们在表达式中使用时如何求值。 它们的操作有特定的规则,因此我们将研究它们以了解使用 C++ 运算符的表达式求值。
C++ 中的运算符
运算符是用于操作变量和值的符号。 例如,+ 和 - 运算符用于加法和减法。
在C++中,运算符分为4类:
- 算术运算符
- 赋值运算符
- 关系运算符
- 逻辑运算符
算术运算符
这些运算符用于对某些数据执行不同的算术运算。 例如,* 用于将两个或多个数字或变量相乘。
下面列出了许多算术运算符:
运算符 符号 | 说明 |
---|---|
+ | 加法运算符 |
- | 减法运算符 |
* | 乘法运算符 |
/ | 分部操作员 |
% | 模数运算符(除法运算后的余数) |
赋值运算符
这些运算符可以为变量分配一些特定的值; = 是赋值运算符。 考虑下面的例子。
int a;
a = 5;
此处,将使用赋值运算符 = 为 a 赋值 5。 还有其他赋值运算符,如下所示:
运算符 | 等效语句 |
---|---|
a += 5 | a = a +5 |
a -= 5 | a = a -5 |
a *= 5 | a = a*5 |
a /= 5 | a = a /5 |
a %= 5 | a = a%5 |
关系运算符
关系运算符用于比较 2 个值或操作数。 如果关系评估为 true,则返回值 1;如果评估为 false,则返回值 0。
C++ 中使用多个关系运算符:
操作符 | 说明 -- | -- <, > | 大于和小于 <=、>= | 小于等于、大于等于 == | 等于 != | 不等于
逻辑运算符
逻辑运算符可以评估表达式是真还是假。 如果为 true,则返回结果为 1; 否则,0。
逻辑运算符有多种,如下所示:
运营符 | 说明 |
---|---|
&& | 与运算符。 如果所有表达式都为 true,则返回 true。 |
` | |
! | 非运算符。 如果表达式为假,则返回真。 |
C++ 中的运算符优先级和结合性
如果我们有一个包含多个运算符的表达式,则该表达式将根据运算符的优先级进行计算。 优先级定义了运算符的优先级以及首先评估哪个运算符。
考虑下面的例子:
a = 3*5/2 +3
现在在这个表达式中,首先操作哪个运算符是由运算符的优先级决定的。
运算符优先级列表如下表所示:
运算符优先级
现在,我们可以看到某些运算符具有相同的优先级。 使用关联规则计算具有相同优先级的此类运算符的表达式。
关联性定义了要以相同优先级进行计算的运算符的序列。 下表描述了运算符的结合性:
运算符结合性
C++ 表达式中的隐式类型转换
当表达式中存在混合类型变量时,编译器会自动根据运算和操作数的数据类型进行类型转换。 例如,考虑以下代码片段:
int a =2, b = 3, c =5;
double f = 4.5;
double res = a + b/f +c;
在最后一行代码中,我们可以看到三个变量的类型为int,一个变量的类型为double。 根据运算符优先级,/
将首先被计算; 在此表达式中,b/f
表示 int 除以 double,因此结果将转换为 double。
之后,+
将被评估为int和double,因此结果将被转换为double。 因此,res 将是双数据类型。
在这里我们可以看到表达式的结果总是被提升为表达式中涉及的更高的数据类型。
int + double => double + double = double
int * double => double * double = double
double * int => double * double = double
int / double => double / double = double
double / int => double / double = double
int / int = int
您可以在上面的表达式中看到在混合类型表达式的情况下如何将类型提升为更高的数据类型。
相关文章
Arduino 复位
发布时间:2024/03/13 浏览次数:315 分类:C++
-
可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。
Arduino 的字符转换为整型
发布时间:2024/03/13 浏览次数:181 分类:C++
-
可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。
Arduino 串口打印多个变量
发布时间:2024/03/13 浏览次数:381 分类:C++
-
可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。