複合代入
変数は、単純に何らかの値を保存するほかに、現在の変数の値から、相対的に他の値と計算をさせるといった使い方も可能です。たとえば、変数xの値に10を加えるといった処理です。もっとも簡単に思いつく方法は、xとは別の変数yを用意して、xと10を加算した結果を保存するというものでしょう。
y = x + 10;
しかし、xの値を維持する必要がない場合は、新しくy変数を用意する必要はありません。xに10を加算した結果をxに保存すればよいのです。
x = x + 10;
上記の代入演算は、正しい式です。代入演算子 = は、最初に右項 x + 10を評価し、その結果をxに保存します。xの値が5だったと仮定すれば、5 + 10が計算され、その結果がxに保存されるので、最終的なxの値は15となります。
このような、変数の現在の値に対して相対的な計算を行うことはしばしば必要になります。上記のような式でもかまいませんが、複合代入演算子と呼ばれる、特定の計算を変数の現在の値に対して行い、結果を同じ変数に保存する、専用の演算子が用意されています。複合代入演算子は += や *= のように記述します。
変数名 op= 式
opには、任意の算術演算子が入ります。変数に対して加算を行うなら +=、減算なら -=、乗算なら *=、除算なら /=、剰余なら %= という形になります。また、このシリーズではご説明していませんが、値の2進数列を左右に移動させるシフト演算子や、論理演算子なども複合代入演算に使うことができます。
サンプル04
#include <stdio.h>
int main(void)
{
int x = 5;
x = x + 10;
printf("x = %d\n", x);
x += 10;
printf("x = %d\n", x);
return 0;
}
実行結果
サンプル04は、宣言したint型の変数xの初期値に5を与えています。その後、xに対してx + 10という式の結果を代入しています。printf()関数でxの値を出力すると、元のxの値5に10を足して15という結果がxに保存されていることが確認できます。続いて、複合代入演算子 += を使って10という値をxに加算代入しています。結果は、前のx + 10 と同じように、現在のxの値に10を加算した結果がxに保存されています。このように x = x + 10 と x += 10 の結果は同じです。