- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 授業/C言語基礎/演算 へ行く。
コンピューターが行う計算を演算といいます。
演算に用いられる記号を演算子といい、いろいろな種類があります。
代入演算子 †
変数のところでも出てきましたが、代入にはイコール = を用います。
変数名 = 式;
左辺は、値が代入される「変数の名前」です。
右辺は、変数の代入のところでは「代入する値」と説明しましたが、正しくは「式」です。 式が計算され、その結果の値が代入されます。
算術演算子 †
数値同士の演算(算術演算)を行う演算子を算術演算子といいます。
算術演算子には、次のようなものがあります。
種類 | 演算子 | 使用例 | 意味 |
加算 | + | a + b | aとbの和を求める |
減算 | - | a - b | aとbの差を求める |
乗算 | * | a * b | aとbの積を求める |
除算 | / | a / b | aをbで割ったときの商をを求める |
剰余算 | % | a % b | aを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から順に並んでいないのは、まだ勉強していない演算子があるからです。