連載
» 2010年03月26日 10時00分 公開

演算子―プログラムにおける基本的な構成要素目指せ! Cプログラマ(4)(1/3 ページ)

プログラミング言語の基本となる「C」。正しい文法や作法を身に付けよう。Cには確かに学ぶだけの価値がある(編集部)

[長沼立巳, 小山博史,@IT]

 第3回「Cの基本:いま、使っている型を意識しよう」では、変数と定数について学びました。

 プログラムでは、変数や定数を使ってさまざまな計算や制御を行います。変数や定数を計算や制御などに利用することを演算、演算のための記号を演算子と呼びます。

 変数や定数を扱うときには、型を意識することが大切でした。今回のお題である演算子でも、型について意識しながら学んでいきましょう。

さまざまな演算子

 Cプログラムの基本的な構成要素は、オペレータオペランドです。オペレータという言葉は日本語でも使う言葉ですのでなじみがあるかもしれませんが、オペランドという言葉は聞いたことがないかもしれません。オペレータは操作する側、オペランドは操作される側のことを指します。

 Cではオペレータのことを演算子と呼びます。オペランドはそのままオペランドと呼び、その演算子が行う操作(つまり演算)の対象となるもののことです。変数や定数はその代表的なものです。

 前回のサンプルプログラムで演算子を確認してみましょう。

●Sample1.c
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    int sum;
    sum = 30 + 40 + 50 + 60 + 70;
    printf("sum : %d\n", sum);
    return EXIT_SUCCESS;
}

 7行目に、=(イコール)と+(プラス)という2つの演算子が登場しています。= は、いくつかある代入演算子の1つです。+ は加算を行う演算子で、減算を行う演算子 - とあわせて加減演算子といいます。

 演算子には、代入演算子と加減演算子のほかにも、たくさんの種類があります。次の表を見てください。

演算子名 構文 概要
後置演算子 [ ] 添字演算子
( ) 関数呼び出し
. -> 構造体および共用体のメンバー
++ -- 後置増分演算子、後置減分演算子
( ){ } ( ){ , } 複合リテラル(C99)
単項演算子 ++ -- 前置増分演算子、前置減分演算子
& * アドレス演算子、間接演算子
+ - ~ ! 単項算術演算子
sizeof sizeof演算子
キャスト演算子 ( )
乗除演算子 * / %
加減演算子 + -
シフト演算子 << >>
関係演算子 < > <= >=
等価演算子 == !=
AND演算子 &
排他OR演算子 ^
OR演算子 |
論理AND演算子 &&
論理OR演算子 ||
条件演算子 c ? t : f
代入演算子 = *= /= %= += -= <<= >>= &= ^= |=
コンマ演算子 ,

 まだ紹介していない演算子もありますが、今後の連載で説明してきます。ここでは、これまでに登場したものを中心に、よく使われる演算子をいくつか解説します。

加減演算子、乗除演算子

 サンプルプログラムSample1.cでは、和を求めるために+演算子を使いました。+演算子の左右にあるオペランドの和を計算します。これと同様に、四則演算(和、差、積、商を求める計算)が行える演算子が用意されています。それぞれ、+-*/になります。%演算子は剰余(割り算の余り)を求めます。

 Sample1.cの「return EXIT_SUCCESS;」の直前へ次のコード片を追加しましょう。以後、特に説明がない場合は、それまで作成したコードへ、同様にしてコード片を追加してください。

●Sample1.cへ追加するコード
    printf("40 - 30 : %d\n", 40 - 30);
    printf("2 * 3 : %d\n", 2 * 3);
    printf("5 / 2 : %d\n", 5 / 2);
    printf("5 %% 2 : %d\n", 5 % 2);

 実行結果は次のようになります。以後、追加した分の結果だけ提示します。

●実行結果
40 - 30 : 10
2 * 3 : 6
5 / 2 : 2
5 % 2 : 1

 結果は大体想像したとおりでしょう。「5 %% 2」と指定されたところだけ、「5 % 2」となっていて不思議に思うかもしれませんが、printfで % を表示したいときには、このように %% と指定することになっています。ここでは詳細な説明はしませんが、別の回で説明する予定です。

●コラム 剰余演算(モジュロ)の使い道

筆者は初めのころ、剰余(割り算の余り)を計算する%演算子が何に使えるのか分かりませんでした。しかし、これが意外と使える演算子なのです。

特に、値の下位のけたを取り出すのによく使われます。n進数の値の下位のmけたを取り出すには、nのm乗の剰余を計算します。

  • 123という10進数の値の下1けたを取り出す → 123を10の1乗(=10進数の10)で割った余り → 123 % 10 = 3
  • 123という10進数の値の下2けたを取り出す → 123を10の2乗(=10進数の100)で割った余り → 123 % 100 = 23
  • 1101という2進数の値の下1けたを取り出す → 1101を2の1乗(=2進数の10)で割った余り → 1101 % 10 = 1
  • 1101という2進数の値の下3けたを取り出す → 1101を2の3乗(=2進数の1000)で割った余り → 1101 % 1000 = 101

Cで実際にプログラムを書く際には10進数や16進数などで記述しますが、ここでは分かりやすくするために2進数の例ではそのまま2進数で表記しています。

なお、上位のけたは商を計算することで求められます。


Index

演算子―プログラムにおける基本的な構成要素

Page1
さまざまな演算子
加減演算子、乗除演算子

Page2
シフト演算子
AND演算子、排他OR演算子、OR演算子、補数演算子

Page3
代入演算子
増分演算子、減分演算子
単項算術演算子
演算子の優先順位
演算子は基本的な構成要素
今回学んだこと


       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。