一、赋值运算符概述
赋值运算符用于将右侧表达式的值赋给左侧的对象。最简单的赋值运算符是等号 =。
带有赋值运算符的表达式称为赋值表达式。
例如:
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)
五、小结
- 赋值表达式的作用是将右侧的值赋给左侧对象,其类型为左侧对象的类型。
- 赋值运算符具有右结合性,支持嵌套赋值。
- 复合赋值运算符将运算和赋值合并,书写简洁且执行效率相同。
- 常见复合赋值运算符包括 +=、-=、*=、/=、%= 以及位运算复合赋值。
- 赋值表达式本身也有值,可以参与其他运算。
Previous: 算术运算符和算术表达式
Next: 逗号运算和逗号表达式