授業/C言語基礎/演算 のバックアップ(No.3)


コンピューターが行う計算を演算といいます。

演算に用いられる記号を演算子といい、いろいろな種類があります。

代入演算子

変数のところでも出てきましたが、代入にはイコール = を用います。

変数名 = 式;

左辺は、値が代入される「変数の名前」です。

右辺は、変数の代入のところでは「代入する値」と説明しましたが、正しくは「式」です。 式が計算され、その結果の値が代入されます。

算術演算子

数値同士の演算(算術演算)を行う演算子を算術演算子といいます。

算術演算子には、次のようなものがあります。

種類演算子使用例意味
加算+a + baとbの和を求める
減算-a - baとbの差を求める
乗算*a * baとbの積を求める
除算/a / baをbで割ったときの商をを求める
剰余算%a % baをbで割ったときの余りを求める

たとえば、整数の加算を行うプログラムは、次のようになります。

#include <stdio.h>

int main(void) {
  int i = 3, j = 5;
  int k = i + j;
  printf("%d + %d = %d\n", i, j, k);
  return 0;
}

このプログラムを実行すると、次のようになります。

luna% a.out
3 + 5 = 8

小数の演算も整数と同じようにできますが、剰余算だけは整数でしかできません。

たとえば、次のようなプログラムを考えてみます。

#include <stdio.h>

int main(void) {
  double d = 3.0, e = 5.0;
  double f = d % e;
  printf("%f \% %f = %f\n", d, e, f);
  return 0;
}

このプログラムをコンパイルすると、次のようなエラーが出ます。

luna% gcc mod.c
mod.c: In function 'main':
mod.c:5: error: 二項演算子 % が不適切です

練習1

[math]5 - 3[/math]を計算するプログラムを作成し、実行せよ。

練習2

[math]1.5 \times 3.2[/math]を計算するプログラムを作成し、実行せよ。

算術演算の結果の型

int型の値とint型の値の算術演算を行うとその結果はint型になり、double型の値とdouble型の値の算術演算を行うとその結果はdouble型になります。

int型の値とdouble型の値の算術演算を行うと、int型の値がdouble型の値に暗黙的に変換され、その結果はdouble型になります。

注意が必要なのは、int型の値をint型の値で割ったときです。

たとえば、次のプログラムについて考えてみます。

#include <stdio.h>

int main(void) {
  double d = 3 / 2;
  printf("d = %f\n", d);
  return 0;
}

このプログラムを実行すると、次のようになります。

luna% a.out
d = 1.000000

普通に考えると[math]3 \div 2 = 1.5[/math]ですが、int型の値とint型の値の算術演算の結果はint型になるので、3 / 2の結果が1になり、これがdouble型に暗黙的に変換されています。

これを避けるためには、いずれかの値(あるいは両方の値)をdouble型にします。

#include <stdio.h>

int main(void) {
  double d = 3 / 2.0;
  printf("d = %f\n", d);
  return 0;
}
#include <stdio.h>

int main(void) {
  double d = 3.0 / 2;
  printf("d = %f\n", d);
  return 0;
}

明示的型変換(キャスト)

int型の値をint型の値で割ってdouble型の値の結果を得たいときには、明示的型変換キャスト)を行います。

キャストは、次のように、変換後の型をカッコ ( ) で囲んで変数名の前に書きます。

 (型) 変数名

たとえば、int型の値をint型の値で割ってdouble型の結果を得るには、次のようにします。

#include <stdio.h>

int main(void) {
  int i = 3, j = 2;
  double d = (double) i / j;
  printf("d = %f\n", d);
  return 0 ;
}

これを実行すると、割り算が行われる前に変数iの値がdouble型に変換され、これを変数jの値で割ってその結果を求めます。

複合代入演算子

演算子の優先順位

演算子に優先順位があります。

算術演算子においては、+や-よりも*や/のほうが優先順位が高いです。

これまでに勉強した演算子の優先順位は、次のようになります。

優先順位演算子使用例意味
2++a正の数
--a負の数
3()(b) aキャスト
4*a * b
/a / b
%a % b剰余
5+a + b
-a - b
15=a = b代入

1から順に並んでいないのは、まだ勉強していない演算子があるからです。

誤差(おまけ)

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS