教科書のp.107-112の内容である.
被演算子が3つ以上を組み合わせて,条件式を作る場合を説明する.例えば,次のような
場合である.
- の場合,演算結果が1(真)となる条件式を作りたい.
これを表すために,条件式として
a < b < c
と書いたらどうなるであろうか?.一見,良さそうだがC言語では許されない.
なぜダメなのであろうか?.演算はひとつずつ実行される.まず,a<bの演算が行わ
れ,その結果は0または1である.そして,cが前の演算結果である0
または1と比較される.これは,最初意図したことと異なる.cは0や
1と比較したいのではない.
これでは,困ってしまう.通常のプログラミング言語にはこれを解決する手段が用意され
ている.そのためには,元の命題を
- かつの場合,演算結果が1(真)となる条件式を作りたい.
と書き換える.「かつ」とは,両方とも同時にという意味である.そうして,
「かつ」に相当する演算子を使う.C言語では,
a < b && b < c
と書く.これで,希望通りの条件式が出来る.
C言語では,このような条件式(論理式)のための演算子は,表
3に示すものが用意されている.この3つの演算子
(&&,||,!)を論理演算子と言う.ここでも,論理演算子を使った演算結果は,0ま
たは1の値となる.
表 3:
論理演算子
演算子 |
説明 |
演算機能 |
&& |
論理積(かつ) |
両方とも1(真)のときのみ1(真) |
|| |
論理和(または) |
少なくともどちらか一方が1(真)の時,1(真) |
! |
論理否定(反転) |
1(真)のとき0(真),0(偽)のとき1(真) |
論理積演算子(
&&)を挟んだ被演算子が両方とも1(真)の場合のみ,その結果は1(真)
となる(表
4).このことから,この演算子は,日本語で「かつ」,英語で
は「AND」と呼ばれる.この演算子の演算規則を見ても明らかなように,0と1の積の演算
と同じである.このことから論理積と呼ばれるのである.
使い方は,先に示したように,
a < b && b < c
のように,演算子の左右に式を書く.もちろん式でなくて,値を書いても良い.
0と1以外の値を書いた場合どうなるか?.C言語の規則では,0以外の場合は,
全て真として取り扱われる.即ち
a = 1 && 5
b = -5 && 20.5
の場合,
a=1, b=1となる.5や-5,20.5も真として取り扱われる.これは,以
降の論理和でも論理否定でも同じである.
表 4:
論理積
a |
b |
a && b |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
論理和演算子(
||)を挟んだ被演算子の少なくとも一方が1 (真)の場合,演算の結果
は1(真)となる(表
5).このことから,この演算子は,日本語で「または」,英
語では「OR」と呼ばれる.これは,に示す,この演算子の演算規則を見ても明らかなよう
に,0と1の和の演算と同じである
2.このことから
論理和と言われる.
使い方は,論理積と同様に,
a < b || b < c
と,演算子の左右に式を書く.もちろん式でなくて,値を書いても良い.
これも,0と1以外の値を書くことができる.論理積同様,0以外の場合は,
全て真として取り扱われる.
表 5:
論理和
a |
b |
a || b |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
論理否定の演算は,演算子(
!)の後ろに書く被演算子の値が0(偽)の場
合,1(真)となる.一方,被演算子の値が1(真)の場合,0(偽)となる(表
6).
使い方は,
!(a < b)
のように,演算子の後に被演算子を書く.
これも,0と1以外の値を書くことができる.論理積同様,0以外の場合は,
全て真として取り扱われる.
いろいろな演算子が出てきたので,その計算の優先順位が問題となる.数学で
は,和や差よりも積や商が優先されるように,C言語でも優先順位がある.今
まで,出てきた演算子の優先順位を表
7にまと
めておく.常識通りの順序になっているので,あまり迷わないと思う.もし,
迷ったら,括弧
()がもっとも優先順位が高いことを思い出し,それを使
えばよい.これは,数学と全く同じである.
また,優先順位が同じ場合,左側から評価するのも数学と同じである.
表 7:
演算子の優先順位(上のほうが優先順位が高い)
種類 |
演算子 |
|
括弧 |
() |
|
論理否定 |
! |
|
乗除 |
* / |
|
加減 |
+ - |
|
比較 |
< <= > >= |
|
等価 |
== != |
|
論理積 |
&& |
|
論理和 |
|| |
|
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成18年7月12日