赋值运算符与赋值表达式

一、赋值运算符概述

赋值运算符用于将右侧表达式的值赋给左侧的对象。最简单的赋值运算符是等号 =。

带有赋值运算符的表达式称为赋值表达式。

例如:

n = n + 5;

赋值表达式的作用是将右边表达式的值赋给等号左边的对象。赋值表达式的类型为等号左边对象的类型,赋值表达式本身也有一个值,即赋值完成后左边对象的值。

二、赋值表达式的嵌套

赋值运算符具有右结合性,可以将多个赋值操作组合在一个表达式中。

int a, b, c;
a = (b = 4) + (c = 2);
cout << a << endl;

上述代码中,b 被赋值为 4,c 被赋值为 2,然后 a 被赋值为 4 + 2 的结果 6。最终输出 a 的值为 6。

三、复合赋值运算符

除了 = 之外,C++ 还提供了 10 种复合赋值运算符,将赋值与算术运算或位运算结合在一起:

与算术运算符结合的复合赋值运算符:

+=(加后赋值)

-=(减后赋值)

*=(乘后赋值)

/=(除后赋值)

%=(取余后赋值)

与位运算符结合的复合赋值运算符:

<<=(左移后赋值)

=(右移后赋值)

&=(按位与后赋值)

^=(按位异或后赋值)

|=(按位或后赋值)

复合赋值运算符的作用是将左边对象与右边表达式进行对应运算,再将结果赋给左边对象。

例如:

a += 100;   // 等价于 a = a + 100;Code language: JavaScript (javascript)

四、代码示例

以下代码演示了赋值运算符和复合赋值运算符的使用:

#include <iostream>
using namespace std;

int main()
{
    // 简单赋值
    int n = 10;
    n = n + 5;
    cout << "n = " << n << endl;   // 输出 15

    // 赋值表达式嵌套
    int a, b, c;
    a = (b = 4) + (c = 2);
    cout << "a = " << a << endl;   // 输出 6
    cout << "b = " << b << endl;   // 输出 4
    cout << "c = " << c << endl;   // 输出 2

    // 复合赋值运算符
    int x = 10;
    x += 100;   // 等价于 x = x + 100
    cout << "x after += 100 : " << x << endl;   // 输出 110

    x -= 20;    // 等价于 x = x - 20
    cout << "x after -= 20 : " << x << endl;    // 输出 90

    x *= 2;     // 等价于 x = x * 2
    cout << "x after *= 2 : " << x << endl;     // 输出 180

    x /= 3;     // 等价于 x = x / 3
    cout << "x after /= 3 : " << x << endl;     // 输出 60

    x %= 7;     // 等价于 x = x % 7
    cout << "x after %= 7 : " << x << endl;     // 输出 4

    // 赋值表达式的值
    int y = 5;
    int z = (y = 10);   // 先将 10 赋给 y,再将赋值表达式的值 10 赋给 z
    cout << "y = " << y << endl;   // 输出 10
    cout << "z = " << z << endl;   // 输出 10

    return 0;
}Code language: PHP (php)

五、小结

  • 赋值表达式的作用是将右侧的值赋给左侧对象,其类型为左侧对象的类型。
  • 赋值运算符具有右结合性,支持嵌套赋值。
  • 复合赋值运算符将运算和赋值合并,书写简洁且执行效率相同。
  • 常见复合赋值运算符包括 +=、-=、*=、/=、%= 以及位运算复合赋值。
  • 赋值表达式本身也有值,可以参与其他运算。

发表回复

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