Cプログラミング入門

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

この記事を読むのに必要な時間:およそ 1 分

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

四則演算子

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

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

これらは,通常の数学の数式と同様に,「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と書くかは,インクリメント中の変数の値を別の変数に代入するなどの場合に,インクリメント前の値を使うか,インクリメント後の値を使うかによって使い分けます。

著者プロフィール

山森丈範(やまもりたけのり)

「C言語はアセンブラを触っているうちに自然に覚えてしまった」というプログラマ。C言語とのかかわり上,OSは専らUNIXを使用。C言語のプログラムでは,いつもLinux/FreeBSD/Solarisすべてで動くことを気に留めている。C言語と同様に移植性の高いシェルスクリプトにも思い入れが深く,著書に『シェルスクリプト基本リファレンス』がある。

著書

コメント

  • リスト4.2 add.cに付いて

    ここでも#includeの後のヘッダーファイル名<stdio.h>が抜けてると思います。

    Commented : #1  cametan (2008/08/16, 13:16)

コメントの記入