今回は計算には必須の演算子を紹介します。少し変わった振る舞いの演算子もありますが、うまく使えば非常に便利です。
四則演算子
加算、減算などの四則演算を行う四則演算子は次のとおりです。
これらは、通常の数学の数式と同様に、「1 + 2」とか「4 * 5」とかのようにそのまま記述すればよいだけです。さらに( )を使って、「(3 + 4) / 7」のような式も表現できます。なお、「%」は剰余(割算の余り)を求めるための演算子であり、たとえば「16 % 7」の値は2になります。
単に「1 + 2」という計算をするだけのプログラムをリスト4.2に示します。ここでは、1と2という値をいったんiとjの変数に入れて足し算を行ったあと、その結果が代入されているkという変数の値をprintf()で表示しています。図4.2の実行例では、計算結果である3が表示されていることがわかります。
代入演算子
代入演算子には、単純代入演算子と複合代入演算子とがあります。これらを順に説明します。
単純代入演算子 | = |
複合代入演算子 | += -= *= /= %= など |
単純代入演算子
変数に値を代入するための「i = 3」という式に使われている「=」のことを、単純代入演算子と言います。単純代入演算子は、変数に値を代入したあと、式全体が代入された値と同じ値を持ちます。
たとえば、「1 + 4」という式は、5という値を持っています。これと同様に、「i = 3」という代入を行う式も、C言語では「式が3という値を持っている」と考えるのです。「式が値を持つ」ということの意味は、この連載でいずれ扱うif文のところで再度説明します。
複合代入演算子
変数iの値に3を加えるには、
と書けばよいでしょう。しかしC言語では、これをもっと簡単に、
と書くことができます。同様に、
は、
と書くことができます。
「i += 3」という式の中にある「+=」などの演算子のことを複合代入演算子と言います。複合代入演算子では、加算、減算などの演算と代入とを同時に行います。さらに、単純代入演算子と同様に、式自体が代入後の値を持ちます。
代入演算子による演算は、ちょうどアセンブラでCPUのレジスタに値を加算したりする発想に似ています。
インクリメント・デクリメント演算子
変数iの値に1を加えるには、「+=」の演算子を使って、
と書くことができますが、加える値が1の場合は特別に、
と書くことができます。変数iの値から1を引く場合も同様に、
と書くことができます。
この、「++」や「--」のことをそれぞれ、インクリメント演算子・デクリメント演算子と呼びます。
「++」や「--」は、変数の前にも後ろにもつけることができます。たとえば、
は、それぞれ、
とも書けます。
i++;も++i;も、iの値が+1されることに変わりはありませんが、その動作は一部異なります。たとえば、
と書いた場合、jには4ではなく3が入ります。つまり、もともとiに入っていた3という値がjに代入されたあとに、i自体が+1されるのです。
一方、「++」を前に付けて、
と書いた場合は、jの値は4になります。つまり、iの値が+1されて4になったあとに、その4がjに代入されるのです。
インクリメントやデクリメントの演算子は、この連載で後述するfor文やwhile文による繰り返し処理の中でよく使われます。i++と書くか++iと書くかは、インクリメント中の変数の値を別の変数に代入するなどの場合に、インクリメント前の値を使うか、インクリメント後の値を使うかによって使い分けます。