增量赋值

增量赋值(Augmented assignment)或称复合赋值(compound assignment)是在一些编程语言中的一类赋值运算符。通常用于替代一条语句，其中的运算符把变量作为一个运算数，再把结果赋值给同一变量。例如x += 1可展开为x = x + (1)。常适用于算术运算符、移位运算符、位操作运算符等。

语义
在如C语言中，增量赋值语句是表达式，因此允许右结合的连续的增量赋值，如下例：
a += b += c
而Python语言的赋值语句和增量赋值语句不是表达式，因此不允许上述用法。 

C++语言的增量赋值表达式的值为左值。因此允许下述用法：
int x = 11;
(x *= 2) += 3; // Sets x to 25

在C语言、C++、Python中，增量赋值的赋值位置如果包括了函数调用，则强制只调用一次，如下例：
my_array[f1()] += 1
函数f1被强制只调用一次。

如果下例的f1()是宏扩展：
my_array[f1()] = my_array[f1()] + 1
则f1被调用两次。

常见的增量赋值运算符
C、C++、C#等语言中的“复合赋值运算符”：
 运算符 描述 += 加法 -= 减法 *= 乘法 /= 除法 %= 求余 <<= 向左移位 >>= 向右移位 &= 按位与 ^= 按位异或 |= 按位或
语言支持

 APL
 AWK
 C
 C++
 C#

 D
 DWScript

 Free Pascal (Needs -Sc command line switch)
 Go
 Java
 JavaScript
 Kotlin
 Objective-C
 Perl
 PHP

 Python
 Ruby
 Rust
 Scala
 SystemVerilog
 Swift
 Visual Basic

参见
 增值和减值操作符—special case of augmented assignment, by 1
 IEEE 754 augmented arithmetic operation

参考文献

Category:运算符_(编程)