ほとんどのプログラムは、データ表記を気にしなくても、同じように動作しますが、使用するプログラムでもそうなるようにするためには、以下のセクションで説明する相違について 理解しておく必要があります。
ワークステーション・コンパイラーは、データおよび浮動小数点の操作を、メインフレームと同じように 処理するようオペレーティング・システムに指示するオプションをサポートします。 コードをワークステーションに移すときに変更しなければならない場合のある すべてのメインフレーム・アプリケーションには、指定すべき DEFAULT コンパイル時オプションのサブオプションがあります。
コンパイル時オプションの詳細については、DEFAULTを参照してください。
したがって、EBCDIC 16 進値の文字データに依存するコードは、ASCII を使用して実行すると、論理的に失敗する可能性があります。例えば、'40'x と比較してある文字がブランクかどうかをテストするコードは、ASCII を使用して実行すると失敗します。同じように、'OR' および '80'b4 を使用して文字を大文字に変更するコードは、ASCII を使用して実行すると失敗します。(ただし、TRANSLATE 組み込み関数を使用して大文字に 変換するコードは、失敗しません。)
ASCII 文字セットでは、数字は、'30'x から '39'x の 16 進値を持ちます。 ASCII の小文字「a」は 16 進値 '61'x を持ち、大文字「A」は 16 進値 '41'x を 持ちます。EBCDIC 文字セットでは、数字は、'F0'x から 'F9'x の 16 進値を持ちます。 EBCDIC では、小文字「a」は 16 進値 '81'x を持ち、大文字「A」は 16 進値 'C1'x を 持ちます。これらの相違によって、以下の興味深い結果がもたらされます。
このような相違があるため、文字ストリングのソートの結果は EBCDIC と ASCII では異なります。 多くのプログラムでは、このことの影響はありませんが、プログラムが、いくつかの文字ストリングをソートする正確な順序に依存する場合は、論理エラーが発生する可能性に注意する必要があります。
ASCII から EBCDIC への変換については、データ変換表の使用を参照してください。
AIX およびメインフレームの表記は、ビッグ・エンディアン (Big End In) と呼ばれます。
Windows の表記は、逆に、リトル・エンディアン (Little End In) と呼ばれます。
内部表記のこの相違は、以下のものに影響します。
ほとんどのプログラムで、この相違は問題を引き起こしません。ただし、使用するプログラムが 16 進値の整数に依存する場合は、論理エラーの可能性に注意する必要があります。 そのような従属関係は、FIXED BINARY 引数を持った UNSPEC 組み込み関数を使用する場合、または BIT 変数が FIXED BINARY 変数のアドレスに基づく場合に存在する可能性があります。
プログラムが、ポインターを整数と同様に扱う場合は、データ表記の相違が問題を引き起こす場合があります。DEFAULT(NONNATIVE) を指定するときは、ほとんどの場合、DEFAULT(NONNATIVEADDR) も指定する必要があります。
選択した宣言で NONNATIVE 属性を指定できます。例えば、以下のステートメントの代入によって、構造体のすべての FIXED BIN 値は非ネイティブからネイティブ に変換されます。
dcl
1 a1 native,
2 b fixed bin(31),
2 c fixed dec(8,4),
2 d fixed bin(31),
2 e bit(32),
2 f fixed bin(31);
dcl
1 a2 nonnative,
2 b fixed bin(31),
2 c fixed dec(8,4),
2 d fixed bin(31),
2 e bit(32),
2 f fixed bin(31);
a1 = a2;
表 1 は、正規化浮動小数点の IEEE と 16 進との相違の要約です。
| 仕様 | IEEE (AIX) | IEEE (PC) | 16 進数 |
| 値のおよその範囲 | ±10E-308 から ±10E+308 | ±3.30E-4932 から ±1.21E+4932 | ±10E-78 から ±10E+75 |
| FLOAT DECIMAL の最大精度 | 32 | 18 | 33 |
| FLOAT BINARY の最大精度 | 106 | 64 | 109 |
| FLOAT DECIMAL 指数の最大桁数 | 4 | 4 | 2 |
| FLOAT BINARY 指数の最大桁数 | 5 | 5 | 3 |
16 進浮動小数点は、short 浮動小数点、long 浮動小数点、および拡張浮動小数点で同じ最大および最小の 指数値を持ちますが、IEEE 浮動小数点は、short 浮動小数点、long 浮動小数点、および拡張浮動小数点で異なる 最大および最小の指数値を持ちます。つまり、1E74 (PL/I では、属性 FLOAT DEC(1) を持つ必要がある) は有効な 16 進の short 浮動小数点ですが、有効な IEEE の short 浮動小数点ではありません。
ほとんどのプログラムで、FIXED BIN 変数の表記の相違が問題を引き起こさないのとまったく同じように、これらの相違は問題を引き起こしません。ただし、使用するプログラムが、16 進値の浮動小数点値に依存する場合は、コーディングの際に注意が必要です。
また、FIXED BIN の計算は、上で説明した内部表記に依存しない同じ結果をもたらしますが、浮動小数点の計算は、必ずしも同じ結果をもたらすとは限りません。これは、浮動小数点値を表現する方法に相違があるためです。このことは、特に、short 浮動小数点および拡張浮動小数点について当てはまります。
この場合も、ほとんどのプログラムでこのことは問題になりません。 使用するプログラムが、16 進値の GRAPHIC ストリングに依存する場合、または混合文字およびグラフィック・データを含む文字ストリングに依存する場合は、コーディングの際に注意が必要です。