运算符和表达式

一、表达式的概念

表达式可以理解为用于计算的公式,它由运算符(如 + – * /)、运算量(也称为操作数,可以是常量、变量)和括号组成。执行运算后得到的结果就是表达式的值。

例如 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)

十一、小结

  • 表达式是由运算符、操作数和括号组成的计算式,有确定的值。
  • 运算符按操作数个数分为一元、二元和三元运算符。
  • 运算符有优先级和结合性,决定表达式的计算顺序。
  • 常见运算符包括算术、关系、逻辑、赋值、自增自减和条件运算符。
  • 整数除法会舍弃小数部分,取余运算仅适用于整数。
  • 自增自减的前缀和后缀形式对表达式的值有影响。
  • 逻辑与和逻辑或具有短路求值特性。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注