比較演算
比較演算を指定するには、下記のいずれか 1 つの挿入演算子でオペランドを結び付けます。
比較演算の結果は、常に長さ 1 のビット・ストリングです。
オペランドの関係が真であれば、値は '1'B になり、偽であれば '0'B になります。
比較は以下のように定義されます。
- 代数
- コード化算術フォーマットの符号付き算術値を比較します。
2 つのオペランドが基数、スケール、精度、またはモードで異なっている場合は、
算術演算変換に似た方法で変換されます。
数字データは、比較される前にコード化算術フォーマットに変換されます。
演算子 = と ¬= だけが、複素数のオペランドを比較する場合に有効です。
- 文字
- 左から右へ文字単位で文字 (バイト単位で 2 進数値) を比較します。
- ビット
- 左から右へ 1 ビットずつ、2 進数を比較します。
- グラフィック
- 左から右へ DBCS 文字を 1 文字 (2 バイト) ずつ比較します。
比較は、DBCS 文字の 2 進数値に基づいて行われます。
- ワイド文字
- 左から右へ、2 バイトの対の 2 進数値に基づいて
ワイド文字を 1 文字ずつ比較します。
- 序数データ
- 関係演算子を使用して、同じタイプの序数を比較します。
- ポインターおよびオフセット・データ
- 関連する任意の演算子が入っているポインター値とオフセット値を比較します。
ただし、変換を行うことができるのは、オフセットからポインターへの場合です。
- プログラム制御データ
- 内部コード化フォーマットのオペランドを比較します。
比較演算子の = と ¬= のみを使用できます。区域変数は比較できません。
タイプ変換は起こりません。プログラム制御データの比較では、オペランド間の
タイプの相違はすべてエラーになります。
以下のオペランドについては、比較は等しいという結果になります。
- 入り口
- 比較演算では、非アクティブ・ブロックのエントリー・ポイントを値として持つ入り口変数を指定しても、エラーにはなりません。
同じ PROCEDURE または ENTRY ステートメントの入り口名は、等しいものを比較することはできません。
- フォーマット
- 同じ FORMAT ステートメントに関するフォーマット・ラベルの比較が等しい場合。
- ファイル
- 2 つのオペランドがファイル値を表しており、ファイル値の各部分ごとに
等しい場合。
- ラベル
- 同じステートメントに付いている 2 つのラベルを比較すると、
等しいという結果になります。
比較演算では、これ以上活動しないブロック内のラベル定数を値として持つラベル変数を指定しても、エラーにはなりません。
複合ステートメントのラベルを、その複合ステートメントの本体に含まれているラベルと比較した場合、等しいという結果にはなりません。
計算データの比較で両オペランドのデータ・タイプが別々の比較タイプである
場合には、比較タイプに関して優先度の低い方のオペランドが、もう一方の
オペランドの比較タイプに合うように変換されます。
比較タイプの優先順位は、(1) 代数比較 (最も高い)、(2) ワイド文字比較、
(3) グラフィック比較、(4) 文字比較、(5) ビット比較の順です。
例えば、ビット・ストリングと固定小数点値を比較する場合には、10 進数値との代数比較のためにビット・ストリングが 2 進固定小数点フォーマットに変換されます。
さらに、10 進数値も 2 進固定小数点フォーマットに変換されます。
長さの異なる 2 つのストリングの比較では、短い方のストリングの右側に埋め込まれます。
この埋め込みは、以下のものから構成されます。
- 文字比較のときのブランク
- ビット比較のときの '0'B
- グラフィック比較のときのグラフィック (DBCS) ブランク
- ワイド文字比較のときのワイド文字ブランク ('0020'wx)
以下に、IF ステートメントでの比較演算の例を示します。
if A = B
then action-if-true;
else action-if-false;
A = B の式の演算結果は、
これが真であれば '1'B となり、
偽であれば '0'B となります。
以下の代入ステートメントでは、
X = A <= B;
A が B より小さければ、
'1'B という値が X に割り当てられます。
それ以外の場合は、'0'B という値が割り当てられます。
以下の代入ステートメントでは、
X = A = B;
最初の等号は代入記号です。2 番目の等号は比較演算子です。
A が B と等しければ、
'1'B という値が X に割り当てられます。
等しくない場合は、'0'B という値が割り当てられます。
算術式での比較演算の例を示します。
(X<0)*A + (0<=X & X<=100)*B + (100<X)*C
この式の値は X の値に従って、A、B、
または C のいずれかになります。
|
This information center is powered by Eclipse technology. (http://www.eclipse.org)