WisdomSoft - for your serial experiences.

インクリメントとデクリメント

変数の現在の値に対して 1 を加える、もしくは 1 を減らす、インクリメント演算子とデクリメント演算子について解説します。

インクリメント演算

プログラムの中では、繰り返し処理やグラフィックス処理などで頻繁に変数の現在の値 + 1 という計算を行います。このような計算は、通常の算術演算子で次のように求めることができます。

x = x + 1

もしくは、前述した複合代入演算子を用いて以下のように表現することもできるでしょう。

x += 1

これらは x 変数と 1 を加算した値を x 変数に代入しています。 しかし、このような処理を専用に行うインクリメント演算子(Increment operators)が用意されています。インクリメント演算子は ++ 記号で表される単項演算子の一種です。1 を加える変数を項として指定します。

インクリメント演算子は前と後ろのどちらにでも項を指定できます。

++x
x++

上記の式は x 変数に 1 を加えるインクリメント演算の例です。項である x 変数に対し、前と後ろのどちらにでも演算子をおけます。

このとき、項の前に指定する演算子を前置インクリメント(Prefix increment)、項の後に指定する演算子を後置インクリメント(Postfix increment)と呼びます。

コード1
class Test
{
	static void Main()
	{
		int i = 10;
		++i;
		System.Console.WriteLine(i);
		i++;
		System.Console.WriteLine(i);
	}
}
実行結果
コード1 実行結果

インクリメント演算子は整数を 1 加えるという性質があるため、項は変数(代入演算子の左項に指定できる値)で、かつ数値に互換性のある型なければなりません。リテラルや文字列型のような非数値を指定することはできません。

他の演算子と同じように、インクリメント演算子は演算結果を返します。指定した変数をインクリメントすると同時に、その結果を式の中で利用できます。

y = ++x;

上記は有効な式です。x 変数をインクリメントした結果を y 変数に代入しています。

では、インクリメント演算子の結果はどのような値でしょうか。実は、ここに前置インクリメント演算子と後置インクリメント演算子の違いがあります。

前置インクリメント演算子は項に指定された変数に 1 を加えた値、すなわちインクリメント後の変数の値を結果として返します。これに対し、後置インクリメント演算子はインクリメントする前の値を結果として返します。

コード2
class Test
{
	static void Main()
	{
		int i = 10;
		int k = 10;

		System.Console.WriteLine(++i);
		System.Console.WriteLine(k++);
	}
}
実行結果
コード2 実行結果

コード2は同じ値で初期化した i 変数と k 変数を用意し、i 変数を前置インクリメント演算子に与えた結果と、k 変数を後置インクリメント演算子に与えた結果を出力しています。 どちらも最終的な変数の値は 11 になっていますが、後置インクリメント演算子の結果は、インクリメントする前の 10 であることが確認できます。

デクリメント演算

インクリメント演算子と同じ仕組みで、現在の変数の値から1 減らすデクリメント演算子(Decrement operators)も用意されています。 デクリメント演算子は -- 記号で表される単項演算子で、前置デクリメント(Prefix decrement)と後置デクリメント(Postfix decrement)に分かれる点もインクリメント演算子と同じです。

コード3
class Test
{
	static void Main()
	{
		int i = 10;
		--i;
		System.Console.WriteLine(i);
	}
}
実行結果
コード3 実行結果

このように、デクリメント演算子の利用方法はインクリメント演算子と同じです。コード3 では i 変数を 10 で初期化し、その後にデクリメントしています。結果を見れば、変数の値が 1 減っていることが確認できます。