目次ページ  前ページ  次ページ

2. 論理演算

2.5 変数を三つ以上使う演算


2.5.6 論理変数三個を使う論理演算

 括弧を使わない前項の式2.1 を評価するとき、原則は、最初の演算子#で繋がった2変数P,Q間の演算を先に済ませ、その結果を仮の変数に代入しておいて、二番目の演算子#と次の変数Rとの演算をさせます。これは、括弧を使う下の演算式を考えることです;
    (P #Q)#R          式 2.2
しかし、演算子の優先順位が#をよりも#の方が高ければ、この計算手順は間違いです。コンパイラは、この場合、括弧の使い方を下の式2.3 のように評価します;
    P # (Q #R)          式2.3
演算子は6種類ありますが、否定の演算は個別の論理変数ごとに(真・偽)を扱うことにします。三つの式、 (2.1)〜(2.3)のグループごとに25通りの種類がありますので、演算の種別は75通りもあります。論理演算を提案するときは、できるだけ二変数を扱う演算を明示的に括弧で括る式を使います。括弧の使い方に関係しないときは、二つの演算子が同じで対称な場合だけです。内含の演算子⇒は非対称ですので、括弧を左側で使うときと、右側で使うときとで演算の結果は異なります。表2.8は、括弧の使い方によって演算結果が変わること見るために作成しました。括弧を使わない論理式をプログラミング言語のコンパイラが演算順序を組み立てるときは、演算子の優先順位を考えます。そのときに、どこに括弧が入るかを下段の方にまとめました。
これを明示的に括弧を使うときの結果を、表2.8の左欄に示します。括弧を右側の2変数の計算をまとめるようにした場合、その演算結果を対応させて右欄に示します。左右が同じ結果の場合と異なる場合があるのは、演算子に優先順位があるときです。この左右の演算結果を参考にすると、括弧を使わない場合の演算の結果が理解できます。これを表2.8の下段に示しました(表の行数を詰めるため、左右の欄を使っています)。

表 2.8 変数三個の論理演算則の一覧表

番号

記 号

P,Q,Rの真偽値

備考

 

番号

記 号

P,Q,Rの真偽値

備考

 



1 1 1 1 0 0 0 0
1 1 0 0 1 1 0 0
1 0 1 0 1 0 1 0

     



1 1 1 1 0 0 0 0
1 1 0 0 1 1 0 0
1 0 1 0 1 0 1 0

 
 

論理式

論理式の関数値

     

論理式

論理式の関数値

 

左側二変数を括弧で括る場合(式2.2)

 

右側二変数を括弧で括る場合(式2.3)

32L
42L
52L
62L

(P∨Q)∧R
(PQ)∧R
(P≡Q)∧R
(P⇒Q)∧R

1 0 1 0 1 0 0 0
0 0 1 0 1 0 0 0
1 0 0 0 0 0 1 0
1 0 0 0 1 0 1 0

   

32R
42R
52R
62R

P∨(Q∧R)>
(Q∧R)
P≡(Q∧R)
P⇒(Q∧R)

1 1 1 1 1 0 0 0
0 1 1 1 1 0 0 0
1 0 0 0 0 1 1 1
1 0 0 0 1 1 1 1

(*C)
 
 
(*G)

23L
43L
53L
63L

(P∧Q)∨R
(PQ)∨R
(P≡Q)∨R
(P⇒Q)∨R

1 1 1 0 1 0 1 0
1 0 1 1 1 1 1 0
1 1 1 0 1 0 1 1
1 1 1 0 1 1 1 1

  
 
(*5)(*H)
 

23R
43R
53R
63R

P∧(Q∨R)
(Q∨R)
P≡(Q∨R)
P⇒(Q∨R)

1 1 1 0 0 0 0 0
0 0 0 1 1 1 1 0
1 1 1 0 0 0 0 1
1 1 1 0 1 1 1 1

(*B)
 
 
=63L

24L
34L
54L
64L

(P∧Q)
(P∨Q)
(P≡Q)
(P⇒Q)

0 1 1 0 1 0 1 0
0 1 0 1 0 1 1 0
0 1 1 0 1 0 0 1
0 1 1 0 0 1 0 1

   

24R
34R
54R
64R

P∧(QR)
P∨(QR)
P≡(QR)
P⇒(QR)

0 1 1 0 0 0 0 0
1 1 1 1 0 1 1 0
0 1 1 0 1 0 0 1
0 1 1 0 1 1 1 1

 

25L
35L
45L
65L

(P∧Q)≡R
(P∨Q)≡R
(PQ)≡R
(P⇒Q)≡R

1 0 0 1 0 1 0 1
1 0 1 0 1 0 0 1
0 1 1 0 1 0 0 1
1 0 0 1 1 0 1 0

 
(*C)
 
 

 

25R
35R
45R
65R

P∧(Q≡R)
P∨(Q≡R)
(Q≡R)
P⇒(Q≡R)

1 0 0 1 0 0 0 0
1 1 1 1 1 0 0 1
1 0 0 1 0 1 1 0
1 0 0 1 1 1 1 1

 
(*E)
 
(*I)

26L
36L
46L
56L

(P∧Q)⇒R
(P∨Q)⇒R
(PQ)⇒R
(P≡Q)⇒R

1 0 1 1 1 1 1 1
1 0 1 0 1 0 1 1
1 1 1 0 1 0 1 1
1 0 1 1 1 1 1 0

(*6)
 
 
 

 

26R
36R
46R
56R

P∧(Q⇒R)
P∨(Q⇒R)
(Q⇒R)
P≡(Q⇒R)

1 0 1 1 0 0 0 0
1 1 1 1 1 0 1 1
0 1 0 0 1 0 1 1
1 0 1 1 0 1 0 0

 
(*F)
 
 

66L

(P⇒Q)⇒R

1 0 1 1 1 0 1 0

   

66R

P⇒(Q⇒R)

1 0 1 1 1 1 1 1

=26L,(*J)

括弧を使わない場合、優先順位を考えてコンピュータが解釈する演算

32
42
52
62

P∨Q∧R
Q∧R
P≡Q∧R
P⇒Q∧R

P∨(Q∧R)
(Q∧R)
P≡(Q∧R)
P⇒(Q∧R)

=32R
=42R
=52R
=62R

 

25
35
45
65

P∧Q≡R
P∨Q≡R
Q≡R
P⇒Q≡R

(P∧Q)≡R
(P∨Q)≡R
(PQ)≡R
P⇒(Q≡R)

=25L
=35L
=45L
=65R

23
43
53
63

P∧Q∨R
Q∨R
P≡Q∨R
P⇒Q∨R

(P∧Q)
(Q∨R)
P≡(Q∨R)
P⇒(Q∨R)

=23L
=43R
=53R
=63R

 

26R
36R
46R
56R

P∧Q⇒R
P∨Q⇒R
Q⇒R
P≡Q⇒R

(P∧Q)⇒R
(P∨Q)⇒R
(PQ)⇒R
(P≡Q)⇒R

=26L
=36L
=46L
=56L

24
34
54
64

P∧Q
P∨Q
P≡Q
P⇒Q

(P∧Q)
(P∨Q)
P≡(QR)
P⇒(QR)

=24L
=34L
=54R
=64R
 

 

22
33
44
55
66

P∧Q∧R
P∨Q∨R

P≡Q≡R
P⇒Q⇒R

1 0 0 0 0 0 0 0
1 1 1 1 1 1 1 0
1 0 0 1 1 1 1 0
1 0 1 1 0 1 0 0
(P⇒Q)⇒R

(*1)(*A)
(*2)(*D)
(*3)
(*4)
=66L

表の見方:
* この表は括弧の使い方違いを対応させるように、大きく縦の2欄で構成してあります。
* 各欄左端の分類番号は、二桁の整数にLまたはRを付け、括弧を左側か右側を区別します。
* 二桁の数字は、演算子の優先順位です。 32Lの意味は、演算子を∨、∧の順であることを示します。
* 括弧を使わない書き方をするときは、コンパイラは、優先順位を考えて内部的に括弧を補います。
* その場合の分類番号は英字のL,Rを付けてありません。これを表2.8の下段に示し、
    それが対応する分類番号を備考欄に示しました
    (表の行数を詰めるため、左右の欄を使っています)。

科学書刊株式会社:電子版 「橋梁&都市 PROJECT: 2012」

前ページ  次ページ