XL Fortran for AIX V8.1.1
ランゲージ・リファレンス
式には、複数の種類の演算子を含めることができます。その場合、式は、次のような演算子の優先順位に従って、左から右に向かって計算されます。
- 定義済み単項演算子
- 算術演算子
- 文字演算子
- 関係演算子
- 論理演算子
- 定義済み 2 進演算子
たとえば、次のような論理式があるとします。
L .OR. A + B .GE. C
ここで、L が論理タイプで A、B、
C が実数タイプだとすると、その式は以下の論理式と同じように計算されます。
L .OR. ((A + B) .GE. C)
拡張組み込み演算子は、その優先順位を維持します。つまり演算子は、定義済み単項演算子または定義済み 2 進演算子にはなりません。
演算子を使った 1 次子は、次の順序で組み合わされます。
- 括弧を使用する
- 演算子の優先順位
- 因数内の指数を右から左に向かって解釈する
- 項内の乗算および除算を左から右に向かって解釈する
- 算術式内の加算および減算を左から右に向かって解釈する
- 文字式内の連結を左から右に向かって解釈する
- 論理項内の論理積を左から右に向かって解釈する
- 論理和内の論理和を左から右に向かって解釈する
- 論理式内の論理等価を左から右に向かって解釈する
算術式、文字式、関係式、論理式は、次の規則に従って計算されます。
- 変数または関数は、その使用時に定義しておく必要があります。整数オペランドは、ステートメント・ラベル値ではなく、整数値で定義してください。文字データ・オブジェクト内で参照される文字または、配列や配列セクション内で参照される配列エレメントは、すべて参照実行時に定義します。構造体のすべてのコンポーネントを、構造体が参照されるときに定義する必要があります。ポインターは、定義済みターゲットと関連します。
配列エレメントの参照、配列セクションの参照、および添え字の参照を実行するには、そのセクション添え字、およびサブストリング式の計算が必要となります。配列エレメント添え字、セクション添え字、サブストリング式の計算や、配列コンストラクターの暗黙 DO の境界およびストライドは影響を受けることはありません。また、配列を含んでいる式のタイプにも影響しません。
配列にかかわる式を参照してください。計算結果の値が実行可能プログラム内で数学的に定義されていない定数整数演算または浮動小数点演算は使用できません。このような式が定数以外のもので実行された場合、式は実行時に検出されます。
(たとえば、ゼロ除算、またはゼロ値の 1 次子に対するゼロ値または負数値の累乗演算)。または、負数の 1 次子に対して実数レベルでの累乗演算を行うこともできません。
- ステートメント内で関数を呼び出した場合、それが関数参照のあるステートメント内の他のエンティティーの計算に影響を与えたり、そのような計算によって影響を受けるようなことがあってはなりません。ある式の値が真の場合に、論理 IF ステートメントまたは WHERE ステートメントの式の中で関数参照を呼び出すと、実行されるステートメント内のエンティティーに影響を与える場合があります。関数参照によって関数の実引き数が定義または未定義にされる場合、その引き数または関連するエンティティーを同じステートメント内の他の場所に指定してはなりません。次に例を示します。
A(I) = FUNC1(I)
Y = FUNC2(X) + X
上記のようなステートメントは、FUNC1 の参照によって I が定義される場合、または FUNC2 の参照によって X が定義される場合には使用できません。
関数の実引き数の計算は、その関数参照を含んでいる式のデータ型によって影響を受けることはありません。また、関数参照を含んでいる式のデータ型は、関数の実引き数の計算によって影響を受けることはありません。
- ステートメント関数参照の引き数をその参照の計算によって変えることはできません。
+----------------------------------IBM 拡張----------------------------------+
コンパイラー・オプションの中には最終結果のデータ型に影響を与えるものもあります。
- -qintlog コンパイラー・オプションを使用すると、式およびステートメント内で整数と論理値を混在させることができます。その計算結果のデータ型および kind 型付きパラメーターは、関係するオペランドと演算子によって異なります。一般的には、以下のようになります。
- 論理単項演算子 (.NOT.) および算術単項演算子 (+、-) の場合
オペランドのデータ型
| 単項演算の結果のデータ型
|
BYTE
| INTEGER(1)
|
INTEGER(n)
| INTEGER(n)
|
LOGICAL(n)
| LOGICAL(n)
|
タイプなし
| デフォルトの整数
|
この場合の n は、kind 型付きパラメーターを表します。 n は、
-qintlog がオンの場合でも、論理定数と置換できません。また、
-qctyplss がオンの場合でも、文字定数と置換できません。さらに n をタイプなし定数にすることもできません。INTEGER および LOGICAL データ型の場合、結果の長さはオペランドの kind 型付きパラメーターの長さと同じになります。
- 2 進論理演算子 (.AND.、
.OR.、
.XOR.、
.EQV.、
.NEQV.)
および算術 2 進演算子 (**、
*、
/、
+、
-) に関して、次の表に結果のデータ型の種類をまとめてあります。
| 第 2 オペランド
|
第 1 オペランド
| BYTE
| INTEGER(y)
| LOGICAL(y)
| タイプなし
|
---|
BYTE
| INTEGER(1)
| INTEGER(y)
| LOGICAL(y)
| INTEGER(1)
|
INTEGER(x)
| INTEGER(x)
| INTEGER(z)
| INTEGER(z)
| INTEGER(x)
|
LOGICAL(x)
| LOGICAL(x)
| INTEGER(z)
| LOGICAL(z)
| LOGICAL(x)
|
タイプなし
| INTEGER(1)
| INTEGER(y)
| LOGICAL(y)
| デフォルトの整数
|
- 注:
- z は、結果の kind 型付きパラメーターであり、z は、x と y のうちの大きい方に等しくなります。たとえば、LOGICAL(4) タイプのオペランドおよび INTEGER(2) タイプのオペランドを持つ論理式の結果タイプは、INTEGER(4) になります。
2 進論理演算子 (.AND.、
.OR.、
.XOR.、
.EQV.、
.NEQV.)の場合、整数タイプのオペランドと論理タイプのオペランド間、または 2 つの整数タイプのオペランド間の論理演算の結果は、整数タイプになります。 結果の kind 型付きパラメーターは、2 つのオペランドのうちの長い方の長さになります。 2 つのオペランドのパラメーターが同じである場合、結果の kind パラメーターは、その kind パラメーターになります。
- -qlog4 コンパイラー・オプションを使用し、デフォルトの整数サイズが INTEGER(4) の場合は、論理演算の論理結果は、上記の表に示す LOGICAL(n) でなく、タイプ LOGICAL(4) になります。
-qlog4 オプションを指定し、デフォルトの整数サイズが INTEGER(4) でない場合は、その結果は上記の表に指定したものと同じになります。
- -qctyplss コンパイラー・オプションを指定すると、XL Fortran は、文字定数式をホレリス定数として扱います。オペランドのいずれか一方または両方が文字定数式である場合は、その結果のデータ型と長さは、文字定数式がホレリス定数である場合と同じになります。結果のデータ型と長さについては、前記の表の『タイプなし』の行を参照してください。
コンパイラー・オプションの内容については、「ユーザーズ・ガイド」の『XL Fortran コンパイラー・オプションに関する参照事項』を参照してください。
+--------------------------------IBM 拡張の終り-------------------------------+
+----------------------------------IBM 拡張----------------------------------+
BYTE タイプのデータ・オブジェクトは、
LOGICAL(1)、CHARACTER(1)、または INTEGER(1) データ・オブジェクトが使用できるところであればどこでも使用することができます。
BYTE データ・オブジェクトのデータ型は、それを使用するコンテキストによって決まります。
XL Fortran は、使用前には変換を行いません。たとえば、名前付き定数のタイプは、最初に割り当てられた値によってではなく、使用することによって決まります。
- BYTE データ・オブジェクトの 2 進の算術演算子、論理演算子、関係演算子のオペランドとして使用すると、データ・オブジェクトのデータ型は次のようになります。
- その他のオペランドが算術、BYTE、またはタイプなし定数の場合、INTEGER(1)
- その他のオペランドが論理定数の場合、LOGICAL(1)
- その他のオペランドが文字定数の場合、CHARACTER(1)
- BYTE データ・オブジェクトを連結演算子のオペランドとして使用すると、データ・オブジェクトのデータ型は、CHARACTER(1) になります。
- BYTE データ・オブジェクトを明示インターフェースを使用するプロシージャーに対する実引き数として使用すると、データ・オブジェクトのデータ型は対応する仮引き数のタイプになります。
- INTEGER(1) 仮引き数の場合、INTEGER(1)
- LOGICAL(1) 仮引き数の場合、LOGICAL(1)
- CHARACTER(1) 仮引き数の場合、CHARACTER(1)
- BYTE データ・オブジェクトを、暗黙インターフェースを使用する外部サブプログラムに対する実引き数 (参照によって渡されている) として使用すると、そのデータ・オブジェクトは、1 バイトの長さになり、データ型は想定されません。
- BYTE データ・オブジェクトを値 (%VAL) によって渡される実引き数として使用すると、データ・オブジェクトのデータ型は、INTEGER(1) になります。
- BYTE データ・オブジェクトを、算術、論理、または文字のいずれかの特定のデータ型を必要とするコンテキストの中で使用すると、そのデータ・オブジェクトのデータ型は、それぞれ INTEGER(1)、LOGICAL(1)、または CHARACTER(1) になります。
- BYTE タイプのポインターを、文字タイプのターゲットに関連させることはできません。また、文字タイプのポインターを BYTE タイプのターゲットに関連させることもできません。
- BYTE データ・オブジェクトをその他のコンテキストの中で使用する場合、データ・オブジェクトのデータ型は、INTEGER(1) になります。
+--------------------------------IBM 拡張の終り-------------------------------+
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]