Phase #03

式と演算子


1.演算子の種類 - Operators -

普段使っている式と C 言語で言う式とは感じとしては似ていますが、やはり違う部分があります。
C でのを説明すると「定数および識別子の単体、またはそれらと演算子の並び」となります。
定数識別子第 2 章で説明しました。演算子とは、計算や代入するときに使う記号のことです。
演算子にもいろいろな種類があります。かなりたくさんありますが、根気よく 1つずつ見ていきましょう。

A.算術演算子


これが一番馴染み深いと思います。いわゆる「計算」のときに使う加算、減算などをあらわす記号です。
使い方の違いで二項演算子と単項演算子があります。

◎二項演算子
演算をする際に対象となる変数や定数が 2つある時に使う演算子です。
演算子使用例意味
 + 加算n1 + n2n1 と n2 を足す
 - 減算n1 - n2n1 から n2 を引く
 * 乗算n1 * n2n1 と n2 をかける
 / 除算n1 / n2n1 を n2 で割る
 % 剰余算n1 % n2n1 を n2 で割った余り

◎単項演算子
演算をする際に対象となる変数や定数が1つの時に使う演算子です。
演算子使用例意味
 - マイナス-n1-n1 = n1 X (-1)

B.代入演算子


変数に値を代入する場合には代入演算子を使います。この代入演算子は普段使っている「=」です。ただ、左辺と右辺が等しいという意味ではなく、右辺の値を左辺の変数に代入するという意味で使われます。
左辺は識別子でなければなりません。

識別子 = 式

この代入を行うときに注意することは、右辺の方が左辺の方に強制的に変換されて代入されます。
この型変換が行われるとデータの内容が変わってしまう可能性があるので注意しなければなりません。

[ 例 ] 算術・代入演算子の使用例  ex3-1.cGet! ソースファイル
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 )」という呼び方をします。

式1 関係演算子 式2

演算子比較の仕方計算値
 ==等しいn1 == n2n1 = n2 の時 1、それ以外の時 0
 !=等しくないn1 != n2n1 ≠ n2 の時 1、それ以外の時 0
 >より大きいn1 > n2n1 > n2 の時 1、それ以外の時 0
 <未満n1 < n2n1 < n2 の時 1、それ以外の時 0
 >=以上n1 >= n2n1 ≧ n2 の時 1、それ以外の時 0
 <=以下n1 <= n2n1 ≦ n2 の時 1、それ以外の時 0

この関係演算子は条件によって実行する処理をかえたいときに使う制御文によく使われます。

E.論理演算子


論理演算子は論理演算を行う演算子です。論理演算とは、計算に使う値や結果の値が「真」と「偽」の 2つしかないような演算のことです。
この演算子は論理積(AND)論理和(OR)否定(NOT)の 3種類があります。

式1 論理演算子 式2  (論理積、論理和)
論理演算子 式     (否定)


演算子意味計算値
 &&論理積a && ba, b ともに真(≠0)なら真(=1)
それ以外なら偽(=0)
 ||論理和a || ba, b 少なくとも一方が真(≠0)なら真(=1)
a,bともに偽(=0)なら偽(=0)
 !否定!aa が真(≠0)なら偽(=0)
偽(=0)なら真(=1)

この論理演算子を使えば制御文の条件を複数にできます。計算に使う値は 0 は偽、それ以外の値は真として扱われます。

[ 例 ] 関係・論理演算子の使用例  ex3-2.cGet! ソースファイル
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 */


Jump to Phase #02Phase #02: データ型と変数/定数 へ
Phase #03-2: 式と演算子(2) へJump to Phase #03-2

△戻る
▲トップに戻る