各種のコンピューターにおけるデータ格納は、リトル・エンディアンまたはビッグ・エンディアンの格納規則を使用します。格納方法の規則は、一般に、複数のバイトにわたる数値に次のように適用されます。
リトル・エンディアンでの格納
最下位ビット (LSB) の値は、最も小さいアドレスのバイトに含まれています。
最上位ビット (MSB) の値は、最も大きいアドレスのバイトに含まれています。
数値のアドレスは、LSB を含むバイトです。それ以降の大きいアドレスのバイトには、より上位のビットが含まれています。
ビッグ・エンディアンでの格納
最下位ビット (LSB) の値は、最も大きいアドレスのバイトに含まれています。
最上位ビット (MSB) の値は、最も小さいアドレスのバイトに含まれています。
数値のアドレスは、MSB を含むバイトです。それ以降の大きいアドレスのバイトには、より下位のビットが含まれています。
インテル® Fortran は、数値データがネイティブ・リトル・エンディアン順になっていると想定します。これは、最下位の最右端の 0 ビット (ビット 0) またはバイトに、最上位の最左端のビット (またはバイト) よりも下位のアドレスが割り当てられる方式です。
次の図は、この 2 つのバイト順方式の違いを示したものです。
次の図は、ワード内のバイトアドレス指定における、この 2 つの規則の違いを示しています。
この 2 つの規則では、サブコンポーネントとして格納されるデータ型 (ワード内のバイト) は、対応するワード内の異なる場所に格納されます。次の図は、この 2 つの規則におけるいくつかのデータ型表現の違いを示しています。文字は 8 ビットの文字型データを表しており、数字は 32 ビットの整数型データに対する 8 ビットの部分的な拠出分を表しています。
ワード内の文字型および整数型データ: (a) ビッグ・エンディアン、(b) リトル・エンディアン
図の左半分には、ビッグ・エンディアンのワードからリトル・エンディアンのワードに連続的にバイトを転送した場合 (ビッグ・エンディアンのバイト 0 をリトル・エンディアンのバイト 0 に、ビッグ・エンディアンのバイト 1 をリトル・エンディアンのバイト 1 に、...) に、リトル・エンディアンのワード内にデータがどのように格納されるかを示しています。1 バイトのサイズのデータ (この例では文字型) は正しい順序になりますが、整数型データは元のバイナリー値を正しく表していないことに注意してください。図の右半分には、正しい 32 ビット整数値を再現するために、ワードの中央を中心にバイトをスワップする必要があることを示しています。バイトをスワップした後は、上記の図は同じになります。
上の例を一般化して、浮動小数点のデータ型と、マルチワードのデータ型も同じように考えることができます。
書式なしデータファイルをビッグ・エンディアンとリトル・エンディアンのコンピューター間で移動するためには、データを変換する必要があります。
インテル® Fortran は、プログラムがいくつかの非ネイティブ浮動小数点形式とビッグ・エンディアンの INTEGER または浮動小数点形式で、書式なしデータ (もともと書式なし I/O 文で書き出されたもの) を読み書きする機能を提供しています。サポートされている非ネイティブ浮動小数点形式には、OpenVMS* VAX システム対応 Digital* FORTRAN がサポートしている Compaq* VAX* リトル・エンディアン浮動小数点形式、Sun Microsystems* システムと IBM* RISC System/6000* システムの大部分で使用されている標準 IEEE ビッグ・エンディアン浮動小数点形式、IBM 浮動小数点形式 (IBM の System/370* とこれに似たシステムで使用されているもの)、および CRAY* 浮動小数点形式などがあります。
一般に、書式なしデータの変換は書式付きデータの変換よりも高速で、浮動小数点数の精度が失われる可能性も低くなります。
ネイティブメモリー形式には、リトル・エンディアン整数とリトル・エンディアンの IEEE 浮動小数点形式、REAL(KIND=4) 宣言と COMPLEX(KIND=4) 宣言の S_floating、REAL(KIND=8) 宣言と COMPLEX(KIND=8) 宣言の T_floating、および REAL(KIND=16) 宣言と COMPLEX(KIND=16) 宣言の X_floating があります。
次の表は、サポートされている非ネイティブ書式なしファイル形式のキーワードとそのデータ型のリストです。
非ネイティブ形式を読み取ると、ディスク上の非ネイティブ形式はメモリー上のネイティブ形式に変換されます。変換後の非ネイティブ値がネイティブデータ型の範囲を超えている場合、ランタイムメッセージが表示されます。
関連情報