Cプログラミング入門

第10回Chapter4 計算してみよう(2)

今回は計算には必須の演算子を紹介します。少し変わった振る舞いの演算子もありますが、うまく使えば非常に便利です。

四則演算子

加算、減算などの四則演算を行う四則演算子は次のとおりです。

+加算
-減算
*乗算
/除算
%剰余

これらは、通常の数学の数式と同様に、⁠1 + 2」とか「4 * 5」とかのようにそのまま記述すればよいだけです。さらに( )を使って、⁠(3 + 4) / 7」のような式も表現できます。なお、⁠%」は剰余(割算の余り)を求めるための演算子であり、たとえば「16 % 7」の値は2になります。

単に「1 + 2」という計算をするだけのプログラムをリスト4.2に示します。ここでは、1と2という値をいったんiとjの変数に入れて足し算を行ったあと、その結果が代入されているkという変数の値をprintf()で表示しています。図4.2の実行例では、計算結果である3が表示されていることがわかります。

リスト4.2 add.c

#include <stdio.h>

int
main()
{
  int i, j, k;

  i = 1;
  j = 2;
  k = i + j;
  printf("k = %d\n", k);
  return 0;
}
図4.2 add.cの実行例

$ gcc -O2 -o add add.c
$ ./add
k = 3
$

代入演算子

代入演算子には、単純代入演算子と複合代入演算子とがあります。これらを順に説明します。

単純代入演算子=
複合代入演算子+= -= *= /= %= など

単純代入演算子

変数に値を代入するための「i = 3」という式に使われている「=」のことを、単純代入演算子と言います。単純代入演算子は、変数に値を代入したあと、式全体が代入された値と同じ値を持ちます。

たとえば、⁠1 + 4」という式は、5という値を持っています。これと同様に、⁠i = 3」という代入を行う式も、C言語では「式が3という値を持っている」と考えるのです。⁠式が値を持つ」ということの意味は、この連載でいずれ扱うif文のところで再度説明します。

複合代入演算子

変数iの値に3を加えるには、

i = i + 3;

と書けばよいでしょう。しかしC言語では、これをもっと簡単に、

i += 3;

と書くことができます。同様に、

i = i - 3;
i = i * 3;
i = i / 3;
i = i % 3;

は、

i -= 3;
i *= 3;
i /= 3;
i %= 3;

と書くことができます。

⁠i += 3」という式の中にある「+=」などの演算子のことを複合代入演算子と言います。複合代入演算子では、加算、減算などの演算と代入とを同時に行います。さらに、単純代入演算子と同様に、式自体が代入後の値を持ちます。

代入演算子による演算は、ちょうどアセンブラでCPUのレジスタに値を加算したりする発想に似ています。

インクリメント・デクリメント演算子

変数iの値に1を加えるには、⁠+=」の演算子を使って、

i += 1;

と書くことができますが、加える値が1の場合は特別に、

i++;

と書くことができます。変数iの値から1を引く場合も同様に、

i--;

と書くことができます。

この、⁠++」「--」のことをそれぞれ、インクリメント演算子・デクリメント演算子と呼びます。

++インクリメント演算子
--デクリメント演算子

⁠++」「--」は、変数の前にも後ろにもつけることができます。たとえば、

i++;
i--;

は、それぞれ、

++i;
--i;

とも書けます。

i++;も++i;も、iの値が+1されることに変わりはありませんが、その動作は一部異なります。たとえば、

i = 3;
j = i++;

と書いた場合、jには4ではなく3が入ります。つまり、もともとiに入っていた3という値がjに代入されたあとに、i自体が+1されるのです。

一方、⁠++」を前に付けて、

i = 3;
j = ++i;

と書いた場合は、jの値は4になります。つまり、iの値が+1されて4になったあとに、その4がjに代入されるのです。

インクリメントやデクリメントの演算子は、この連載で後述するfor文やwhile文による繰り返し処理の中でよく使われます。i++と書くか++iと書くかは、インクリメント中の変数の値を別の変数に代入するなどの場合に、インクリメント前の値を使うか、インクリメント後の値を使うかによって使い分けます。

おすすめ記事

記事・ニュース一覧