算術演算子(教科書 p.107)については,今更説明するまでもないであろう.この中で,剰
余
4(
%)はかなり便利である.
11%4
の演算結果は,
3--11を4で割った値--である.この演算子は便利なので,覚えて
おくと良い.
これらの演算は,主に論理演算に使われる
5.論理が正しい(真 True)か誤り(偽 False)と
いう演算である.演算の結果は,真か偽のいずれかである.真の場合が 1 で,偽の場合
が 0 である.
算術演算子の
+ は2つのデータの加算を行い,その和を返す.
5+8 が
13
になるようにである.関係演算子(p.108)も同じで,2つのデータの演算を行い値を返す.
関係演算子が返す値は,
0 か
1 である.たとえば,
10<20の演算結果は
1 ,
10>20は
0になる.もちろん,演算を行う2つの数値は,実数でも良
い.関係演算子は,大小の比較を行ってその判定をしていると考える.難しいことは,
なにもない.
- [練習1]
- 以下に示すそれぞれの a の値を計算し,結果を表示す
るプログラムを作成せよ.4番目の演算結果については,演算
子の優先順位(p.135表8-3)が問題となる.
|
a=1+2 |
|
a=1<2 |
|
a=1>2 |
|
|
a=1+3>=2+2 |
|
a=5*((1<2)+(2<4)) |
|
|
- [練習1]
- 次の d の値をC言語のプログラムで計算せよ.なぜ
d の値がそのようになるのか考えよ.ただし,全ての変
数はint型とする.ヒント,教科書
p.34表3-1を見よ.
|
a=1122334455; |
|
|
b=1122334455; |
|
|
c=a+b; |
|
|
d=1<c; |
|
関係演算子が大小の比較を表すのに対して,等価演算子は等しいか否かを表す.
- [練習1]
- 教科書のp.108の等価演算子の表を見ながら,以下の演算結果
の値を考えよ.もし分からない場合は,プログラムを作成し
て,計算してみよ.
|
100 == 100 |
|
3 == 5 |
|
3.0 == 3 |
|
|
6 != 5 |
|
5 != 5 |
|
論理演算子は2年生の時に学習したブール代数の演算子である.ブール演算では,否定は
NOT で,論理積は AND で,論理和は OR で表す.しかし,p.109の表に示すような記号を
用いる.当然これも真理値表で書くことができて,表
2〜
4のように表す.
演算の対象が 0 の場合は偽 (0) として扱われ,1 の場合は真 (1) となる.これは簡単
でブール代数の演算そのものである.表2〜4のようになる.
表 3:論理積の演算
a |
b |
a && b |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
表 4:論理和の演算
a |
b |
a || b |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
|
|
問題は,演算の対象が 0 や 1 以外の場合である.プログラマーからすれば,
コンパイラーがエラーを出すか,実行時にエラーを出して止まってくれれば良いのだが,
実際にはそうはならない.C言語の仕様では 0 と 1 以外の場合,それは真(1)
として扱うと決まっている.C言語では,
として取り扱われると覚えておく.そうすると,論理演算は表5〜
7のようになる.
表 6:
C言語の論理積
a |
b |
a && b |
0 |
0 |
0 |
0 |
0以外 |
0 |
0以外 |
0 |
0 |
0以外 |
0以外 |
1 |
|
表 7:
C言語の論理和
a |
b |
a || b |
0 |
0 |
0 |
0 |
0以外 |
1 |
0以外 |
0 |
1 |
0以外 |
0以外 |
1 |
|
|
|
|
インクリメント演算子(++)は 1 加算し,デクリメント演算子(-)は 1 減算す
る演算子である.教科書に書いてあるように,a=a+1 あるいは a=a-1の代わり
に使われる.カウンターとして使っている変数の値を変化させるときに,使われることが
多く,代入演算子(=)を使うよりも,インクリメントやデクリメント演算子を使う方
がC言語風で格好良いのである.
1 #include <stdio.h>
2
3 int main(void){
4 int i,j;
5
6 i=10;
7 j=10;
8
9 i++;
10 j--;
11
12 printf("i=%d j=%d\n",i,j);
13
14 return 0;
15 }
- [練習1]
- リスト3の動作を確かめよ.
単純代入演算子(=)は説明しなくても分かっていると言いたいが,これがどうして
なかなかちゃんと理解されていないのである.単純代入演算子(=)は数学のイコール
()と異なり,これは演算子である.演算子と言うことであるから,これを挟んだ変数
に対して操作をする6. その操作
は,右辺の式の値を左辺の変数に代入する(図7).必ず,右辺は式7で,左辺は変数でなくてはならない.
左辺と右辺が等しいか否かの比較は等価演算子(==)を使う.C言語では,代入演算子
(=)と等価演算子(==)はしっかり区別を付けなくてはならない.
そもそも,代入演算子に数学のイコールと同じ記号を使うから,間違う.a=b+cと書
かないでa+b->cとでも書けば,間違えることは無いし,意味も分かりやすい.
最初の高級言語で,代入演算子にイコールが使われたから,それ以降,使われているのだろ
う.
複合代入演算子もよく使われる.特に += は使われることが多いので,よく覚えておか
なくてはならない.a の変数の値に b を加算する場合,a=a+bとすれば
よいが,C言語ではa+=bと書くのが普通である.前者でも問題なく実行できるが,後
者の方がC言語風で格好良いとされている.ほかの複合代入演算子も同じである.
代入演算子の使用例については,教科書 [1]のp.119の表8-2が詳しい.そ
こを一度見よ.
1 #include <stdio.h>
2
3 int main(void){
4 int i,j;
5
6 i=3;
7 j=6;
8
9 i+=j;
10
11 printf("i=%d j=%d\n",i,j);
12
13 return 0;
14 }
- [練習1]
- リスト4の動作の結果を考えよ.
ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成18年5月2日