論理式は 1 つまたは複数の論理演算子と,論理,数値,または関係演算対象で構成されます。以下に論理演算子を示します。
演算子 | 例 | 意味 |
.AND. | A .AND. B | 論理積。式は,A と B の両方が真のときに真となります。 |
.OR. | A .OR. B | 論理和 (包括的 OR)。式は,A と B のどちらか,または両方が真のときに真となります。 |
.NEQV. | A .NEQV. B | 論理非等価 (排他的 OR)。式は,A または B が真のときに真となりますが,両方が真のときには偽となります。 |
.XOR. | A .XOR. B | .NEQV. と同じ。 |
.EQV. | A .EQV. B | 論理等価。式は,A と B の両方が真であるか,両方が偽であるときに真となります。 |
.NOT. 1 | .NOT. A | 論理否定。式は,A が偽のときに真となり,A が真のときに偽となります。 |
1 .NOT. は単項演算子です。 |
ピリオドは,第 2 の演算子が .NOT. である場合を除いて,連続して宣言することはできません。たとえば,次の論理式は有効です。
A+B/(A-1) .AND. .NOT. D+B/(D-1)
論理演算の結果として得られるデータ型
論理演算対象に対する論理演算は,論理型の 1 つの値 (.TRUE. または .FALSE.) を生成します。
整数型に対する論理演算は,整数型の 1 つの値を生成します。演算は,整数型演算対象の内部表現 (2 進) の対応するビットに対して,ビットごとに実行されます。
整数値と論理値の組み合わせに対する論理演算も,やはり整数型の 1 つの値を生成します。論理値を整数に変換した後,整数に対する演算を行います。
その他のデータ型に対して論理演算を実行することはできません。
論理式の評価
論理式は演算子の優先順位に従って評価されます。次の式を考えます。
A*B+C*ABC == X*Y+DM/ZZ .AND. .NOT. K*B > TT
この式は,次の順序で評価されます。
(((A*B)+(C*ABC)) == ((X*Y)+(DM/ZZ))) .AND. (.NOT. ((K*B) > TT))
数値式と同様に,括弧を使って評価の順序を変更することができます。
複数の演算子が同じ優先順位を持っている場合,コンパイラは,代数的な左から右の評価順序で (ただしべき乗は例外で,右から左に評価されます) 得られる結果と等しい結果が得られる限り,同じ優先順位の演算子を任意の順序で評価することができます。
結果が部分式の評価順序に依存するような論理式を書いてはなりません。コンパイラは部分式を任意の順序で評価することができます。次の例で,(A(I)+1.0) と B(I)*2.0 のどちらが先に評価されるかはわかりません。
(A(I)+1.0) .GT. B(I)*2.0
一部の部分式は,コンパイラが論理式中の他の部分式を検証した結果として,まったく評価されないことがあります。次の式を考えます。
A .AND. (F(X,Y) .GT. 2.0) .AND. B
コンパイラが A を先に評価し,A が偽だった場合,コンパイラは式が偽であると判断して,副プログラム F(X,Y) を呼び出さない可能性があります。
関連情報
数値,関係,および論理演算子の優先順位の詳細については,「演算子の優先順位の要約」を参照してください。