在赋值运算符之前加上其他运算符可以构成复合赋值运算符。
C语言规定可以使用10种复合赋值运算符,其中与算术运算有关的复合赋值运算符有:+=、-=、*=、/=、%=(注意:两个符号之间不可以有空格)。复合赋值运算符的优先级与赋值运算符的优先级相同。表达式n+=1的运算规则等价于n=n+1,表达式n*=m+3的运算规则等价于n=n*(m+3),因为运算符“+”的优先级高于复合赋值运算符“*=”。其他以此类推。
例2.3 已有变量a,其值为9,计算表达式a+=a-=a+a的值。
因为赋值运算符与复合赋值运算符“-=”和“+=”的优先级相同,且运算方向自右至左,所以:
(1)先计算“a+a”;因a的初值为9,所以该表达式的值为18,注意a的值求变。
(2)再计算“a-=18”,此式相当于“a=a-18”,因a的值仍为9,所以表达式的值为-9,注意a的值已为-9。
(3)最后计算“a+=-9”,此式相当于“a=a+(-9)”,因a的值此时已是-9,所以表达式的值为-18。
由此可知,表达式a+=a-=a+a的值是-18。