Oracle® Developer Studio 12.5: Fortran ユーザーズガイド

印刷ビューの終了

更新: 2016 年 6 月
 
 

4.2 データ型

ここでは、Fortran データ型の機能と拡張子について説明します。

4.2.1 ブール型

f95 では、ブール型の定数と式をサポートしています。ただし、ブール型の変数、配列、文はサポートしていません。

4.2.1.1 ブール型に関する規則

  • マスク処理の場合、ビット単位の論理式ではブール型の結果が生成されます。個々のビットは、対応する演算対象のビットで行われた 1 つまたは複数の論理演算の結果を表します。

  • 2 進の算術演算子および関係演算子では、次のように処理されます。

    • 一方の演算対象がブール型の場合は、そのまま演算が実行されます。

    • 両方の演算対象がブール型の場合は、両者を整数であるとみなして演算が実行されます。

  • ユーザー定義の関数によってブール型の結果を生成することはできません。ただし、一部の (標準でない) 組み込み関数では可能です。

  • ブール型と論理型には、次のような相違点があります。

    • 変数、配列、関数は論理型にできますが、ブール型にすることはできません。

    • LOGICAL 文はありますが、BOOLEAN 文はありません。

    • 論理型の変数、定数、または式は、.TRUE. または .FALSE. の 2 つの値のみ表します。ブール型の変数、定数、または式は、あらゆるバイナリ値を表すことができます。

    • 論理要素は、算式、関係式、またはビット単位の論理式において無効です。ブール要素はいずれにおいても有効です。

4.2.1.2 ブール型定数の代替書式

f95 では、ブール型定数 (8 進、16 進、ホレリス) を、次のような書式 (2 進ではありません) で使用することができます。ただし変数はブール型として宣言できません。標準の Fortran では、このような書式は許されていません。

8 進

書式は ddddddB です。d は任意の 8 進数です。

  • B または b のどちらの文字を使用してもかまいません。

  • 1 桁から 11 桁までの 8 進数 (0 から 7) を使用できます。

  • 11 桁の 8 進数は 32 ビットの完全なワードを表します。左端の数字は常に 0、1、2、3 のいずれかです。

  • 8 進の個々の数字は 3 ビットの値を表します。

  • 右端の桁は、右 3 ビット (29、30、31 ビット) の内容を表します。

  • 11 桁未満の場合は、値は右揃えになります。ワードの右端にある n ビットから 31 ビットまでが使用され、それ以外のビットは 0 になります。

  • 空白は無視されます。

入出力の書式指定では、B という文字は 2 進数であることを示しますが、それ以外の場合は 8 進数であることを表します。

16 進

X'ddd' または X"ddd"d が任意の 16 進数である の書式です。

  • 1 桁から 8 桁までの 16 進数 (0 から 9、A から F) を使用できます。

  • 文字は大文字でも小文字でもかまいません (XxA から Fa から f)。

  • 数字は引用符 (アポストロフィ) または二重引用符で囲む必要があります。

  • 空白は無視されます。

  • 16 進数の始めに + か - の記号を付けてもかまいません。

  • 8 桁の 16 進数は 32 ビットの完全なワードを表しています。この 32 ビットワードの各ビットの内容は、同じ値を表す 2 進数に対応しています。

  • 8 桁未満の場合は、値は右揃えになります。ワードの右端にある n ビットから 31 ビットまでが使用され、それ以外のビットは 0 になります。

ホレリス

ホレリスデータには、次の書式を使用できます。

nH
’H
""H
nL
’L
""L
nR
’R
""R

前述の「…」は文字列を表し、n は文字数を表します。

  • ホレリス定数はブール型です。

  • ビット単位の論理式に文字定数がある場合は、その式はホレリスとみなされます。

  • ホレリス定数には 4 文字まで使用することができます。

例: 8 進と 16 進の定数の表現例を示します。

ブール型定数
1 ワード 32 ビットでの内部の 8 進数
0B
00000000000
77740B
00000077740
X"ABE"
00000005276
X"-340"
37777776300
X’1 2 3’
00000000443
X’FFFFFFFFFFFFFFFF’
37777777777

例: 代入文での 8 進と 16 進の使用例を示します。

i = 1357B
j = X"28FF"
k = X’-5A’

算術式の中で 8 進数または 16 進数の定数を使用すると、結果が未定義になることがあります。ただし、構文エラーにはなりません。

4.2.1.3 別の場所におけるブール型定数の使用

f95 では、DATA 文以外の場所で BOZ 定数を使用することができます。

Bbbb
Oooo
Zzzz
B"bbb"
O"ooo"
Z"zzz"

このような BOZ 定数が実数変数に代入されている場合には、型は変換されません。

標準の Fortran では、これらを DATA 文でのみ使用できます。

4.2.2 数値データ型のサイズの略記法

f95 では、宣言文、関数文、 IMPLICIT 文において、次のような非標準の書式で型を宣言することができます。1 列目の形式は一般に使用されていますが、非標準の Fortran です。2 列目の種別番号はベンダーにより変わります。

表 28  数値データ型のサイズの表記法
非標準
宣言子
短縮書式
意味
INTEGER*1
INTEGER(KIND=1)
INTEGER(1)
1 バイトの符号付き整数
INTEGER*2
INTEGER(KIND=2)
INTEGER(2)
2 バイトの符号付き整数
INTEGER*4
INTEGER(KIND=4)
INTEGER(4)
4 バイトの符号付き整数
LOGICAL*1
LOGICAL(KIND=1)
LOGICAL(1)
1 バイト論理型
LOGICAL*2
LOGICAL(KIND=2)
LOGICAL(2)
2 バイト論理型
LOGICAL*4
LOGICAL(KIND=4)
LOGICAL(4)
4 バイト論理型
REAL*4
REAL(KIND=4)
REAL(4)
IEEE の単精度浮動小数点数 (4 バイト)
REAL*8
REAL(KIND=8)
REAL(8)
IEEE の倍精度浮動小数点数 (8 バイト)
REAL*16
REAL(KIND=16)
REAL(16)
IEEE の 4 倍精度浮動小数点数 (16 バイト)
COMPLEX*8
COMPLEX(KIND=4)
COMPLEX(4)
単精度複素数 (各部に 4 バイト)
COMPLEX*16
COMPLEX(KIND=8)
COMPLEX(8)
倍精度複素数 (各部に 8 バイト)
COMPLEX*32
COMPLEX(KIND=16)
COMPLEX(16)
4 倍精度複素数 (各部に 16 バイト)

4.2.3 データ型のサイズおよび整列

記憶領域および整列は常にバイト単位で表されます。シングルバイトに収まる値は、バイト整列です。

データ型のサイズおよび整列は、コンパイラのオプションとプラットフォーム、および変数の宣言方法に依存します。COMMON ブロック内のデフォルトの最大の整列は、4 バイトの境界整列です。

デフォルトのデータ整列および記憶領域の割り当ては、-aligncommon-f-dalign-dbl_align_all-xmemalign、および -xtypemap などの特別なオプションを指定してコンパイルすることにより、変更できます。このマニュアルは、これらのオプションが有効でないものとして記述されています。

デフォルトのサイズおよび整列を次の表にまとめます (データ型のその他の点およびオプションは考慮していません)。

表 29  デフォルトのデータサイズおよび整列 (バイト)
Fortran のデータ型
サイズ
デフォルトの整列
COMMON 内の整列
BYTE X
CHARACTER X
CHARACTER*n X
1
1
n
1
1
1
1
1
1
COMPLEX X
COMPLEX*8 X
DOUBLE COMPLEX X
COMPLEX*16 X
COMPLEX*32 X
8
8
16
16
32
4
4
8
8
8/16
4
4
4
4
4
DOUBLE PRECISION X
REAL X
REAL*4 X
REAL*8 X
REAL*16 X
8
4
4
8
16
8
4
4
8
8/16
4
4
4
4
4
INTEGER X
INTEGER*2 X
INTEGER*4 X
INTEGER*8 X
4
2
4
8
4
2
4
8
4
2
4
4
LOGICAL X
LOGICAL*1 X
LOGICAL*2 X
LOGICAL*4 X
LOGICAL*8 X
4
1
2
4
8
4
1
2
4
8
4
1
2
4
4

次の点に注意してください。

  • REAL*16 および COMPLEX*32: 64 ビット環境 (-m64 を指定してコンパイル) では、デフォルトの整列は、表で 8/16 と示されるように、8 バイトではなく 16 バイト境界整列になります。このデータ型は、4 倍精度とも呼ばれます。

  • 配列および構造体は、その要素または欄に従って整列します。配列は、配列要素と同じように整列します。構造体は、もっとも広い整列で整列する欄と同じように整列します。

オプション -f または -dalign は、8、16、または 32 バイトのデータすべてを、強制的に 8 バイト境界で整列させます。オプション -dbl_align_all の場合は、すべてのデータが 8 バイト境界で整列します。これらのオプションを使用するプログラムには、移植性がない場合があります。