インクリメント・デクリメント

ここではインクリメント(++)とデクリメント(−−)について学びましょう。
インクリメント→現在の値に1足すこと
デクリメント→現在の値から1引くこと
です。
今後学習するwhile文などの繰り返し文を作成する時に便利な演算子です。

動かしてみよう

サンプルコードを用意しました。
実行ボタンを押してみてください。

インクリメントやデクリメントを変数の前後どちらにつけるかで異なる出力結果が得られていますね。

解説

インクリメントとデクリメントの基本的な使い方は下記です。

++変数;  /* 前インクリメント */
変数++;  /* 後インクリメント */
--変数;  /* 前デクリメント */
変数--;  /* 後デクリメント */

変数++ と ++変数 によって実施される処理はどちらも 変数=変数+1 と同じです。
ただし +1 が実施されるタイミングが異なります。

サンプルコードをもとに見てみましょう。

[前インクリメント]

incre = 10;
printf("++10 は前カウントなので %d です。\n", ++incre);

上記をインクリメントを用いずに書き直すと、下記になります。

incre = 10;
incre = incre + 1;
printf("++10 は前カウントなので %d です。\n", incre);

printfの前に incre が +1 されるので、出力結果としては演算後の値である 11 が出力されました。

[後インクリメント]

incre = 10;
printf("10++ は後カウントなので %d です。\n", incre++);

上記をインクリメントを用いずに書き直すと、下記になります。

incre = 10;
printf("10++ は後カウントなので %d です。\n", incre);
incre = incre + 1;

printfの後に incre が +1 されるので、出力結果としては演算前の値である 10 が出力されました。

デクリメントの場合も同様です。

注意点

前か後か

インクリメントとデクリメントの注意点は、前か後かの1点につきます。
インクリメントやデクリメントは繰り返し文であるwhile文などと相性がよく、繰り返しを何回させるかを数える時によく使用されます。
ただし、ミスも起こしがちなので注意が必要です。

下記の例をみてみましょう。

/* ループを3回繰り返すコード */
int count = 0;
while( ++count > 3 )
{
  /* 処理 */
}

whileの条件式において、前インクリメントをしているため、while内の処理が2回しか実行されないコードになっています。
正しくは後インクリメント count++ とするべきです。

まとめ

まとめです。

  • ++ や −− で1足したり引いたりできます。
  • 前と後で動作が違います。
  • 前と後を使いわけよう。

以上です。
ではまた。

タイトルとURLをコピーしました