普段使っている式と C 言語で言う式とは感じとしては似ていますが、やはり違う部分があります。
C での
式を説明すると
「定数および識別子の単体、またはそれらと演算子の並び」となります。
定数や
識別子は
第 2 章で説明しました。
演算子とは、
計算や代入するときに使う記号のことです。
演算子にもいろいろな種類があります。かなりたくさんありますが、根気よく 1つずつ見ていきましょう。
A.算術演算子
これが一番馴染み深いと思います。いわゆる「計算」のときに使う加算、減算などをあらわす記号です。
使い方の違いで二項演算子と単項演算子があります。
◎二項演算子
演算をする際に対象となる変数や定数が 2つある時に使う演算子です。
演算子 | 使用例 | 意味 |
+ 加算 | n1 + n2 | n1 と n2 を足す |
- 減算 | n1 - n2 | n1 から n2 を引く |
* 乗算 | n1 * n2 | n1 と n2 をかける |
/ 除算 | n1 / n2 | n1 を n2 で割る |
% 剰余算 | n1 % n2 | n1 を n2 で割った余り |
◎単項演算子
演算をする際に対象となる変数や定数が1つの時に使う演算子です。
演算子 | 使用例 | 意味 |
- マイナス | -n1 | -n1 = n1 X (-1) |
B.代入演算子
変数に値を代入する場合には代入演算子を使います。この代入演算子は普段使っている「=」です。ただ、左辺と右辺が等しいという意味ではなく、右辺の値を左辺の変数に代入するという意味で使われます。
左辺は識別子でなければなりません。
この代入を行うときに注意することは、右辺の方が左辺の方に強制的に変換されて代入されます。
この型変換が行われるとデータの内容が変わってしまう可能性があるので注意しなければなりません。
[ 例 ] 算術・代入演算子の使用例
ex3-1.c
int a, b, c;
/* 変数 a, b, c を int 型で宣言 */
float d;
/* 変数 d を float 型で宣言 */
a = 5; /* 変数 a に 5 を代入 */
b = a + 10; /* 変数 b に a+10 の結果(=15)を代入 */
c = 100.0 / b; /* 変数 c = 6(int 型なので小数点以下が切り捨てられる) */
d = 100.0 / b; /* 変数 d = 6.66... */
C.インクリメント・デクリメント演算子
インクリメント・デクリメント演算子は値を 1 だけプラスしたりマイナスしたりできます。
この演算子は使い方が 2種類あります。
演算子を変数(式)の前に置く前置形と
後ろに置く後置形とがあります。
インクリメント演算子の使用例を考えてみましょう。変数 a の値をプラス1 したいときには通常の代入を使えばこうなります。
a = a + 1
インクリメント演算子で同じ計算をするにはこのようにします。
a++(後置形) または ++a(前置形)
前置形と後置形とでは演算の順序が違うので注意が必要です。その違いを見てみましょう。
なお、計算前の変数の値は a = 1 とします。
- ・前置形
- b = ++a;
この式を通常の代入式に分解するとこのようになります。
a = a + 1;
b = a;
よって計算後の値は a = 2, b = 2 となります。
- ・後置形
- b = a++;
同様に分解するとこのようになります。
b = a;
a = a + 1;
よって計算後の値は a = 2, b = 1 となるわけです。
デクリメント演算子の場合でも同じ事が言えます。
D.関係演算子
関係演算子は 2つ式の値を比較したい場合に使います。例えば変数 a と b に代入されている値のどちらが大きいかを調べたいときなどです。
計算結果は特殊で、関係が成立する時は 1、成立しないときは 0 になります。また、
関係が成立する状態を「真 ( true )」、
成立しない状態を「偽 ( false )」という呼び方をします。
演算子 | 比較の仕方 | 例 | 計算値 |
== | 等しい | n1 == n2 | n1 = n2 の時 1、それ以外の時 0 |
!= | 等しくない | n1 != n2 | n1 ≠ n2 の時 1、それ以外の時 0 |
> | より大きい | n1 > n2 | n1 > n2 の時 1、それ以外の時 0 |
< | 未満 | n1 < n2 | n1 < n2 の時 1、それ以外の時 0 |
>= | 以上 | n1 >= n2 | n1 ≧ n2 の時 1、それ以外の時 0 |
<= | 以下 | n1 <= n2 | n1 ≦ n2 の時 1、それ以外の時 0 |
この関係演算子は条件によって実行する処理をかえたいときに使う
制御文によく使われます。
E.論理演算子
論理演算子は論理演算を行う演算子です。
論理演算とは、
計算に使う値や結果の値が「真」と「偽」の 2つしかないような演算のことです。
この演算子は
論理積(AND)、
論理和(OR)、
否定(NOT)の 3種類があります。
式1 論理演算子 式2 (論理積、論理和)
論理演算子 式 (否定)
|
演算子 | 意味 | 例 | 計算値 |
&& | 論理積 | a && b | a, b ともに真(≠0)なら真(=1) それ以外なら偽(=0) |
|| | 論理和 | a || b | a, b 少なくとも一方が真(≠0)なら真(=1) a,bともに偽(=0)なら偽(=0) |
! | 否定 | !a | a が真(≠0)なら偽(=0) 偽(=0)なら真(=1) |
この論理演算子を使えば制御文の条件を複数にできます。計算に使う値は 0 は偽、それ以外の値は真として扱われます。
[ 例 ] 関係・論理演算子の使用例
ex3-2.c
int dat1, dat2, ret1, ret2, ret3, ret4;
/* 変数の宣言 */
dat1 = 2; /* 比較に使う値を代入 */
dat2 = 6;
ret1 = dat1 > dat2; /* dat1 > dat2 は 偽 → ret1 = 0 */
ret2 = dat1 < dat2; /* dat1 < dat2 は 真 → ret2 = 1 */
ret3 = (dat1 == 2) && (dat2 < 4); /* 偽(=0)かつ 真(=1)は 偽 → ret3 = 0 */
ret4 = (dat1 == 2) || (dat2 < 4); /* 偽(=0)または 真(=1)は 真 → ret4 = 1 */