f95 では、ブール型の定数と式をサポートしています。ただし、ブール型の変数、配列、文はサポートしていません。
マスク処理の場合、ビット単位の論理式ではブール型の結果が生成されます。個々のビットは、対応する演算対象のビットで行われた 1 つまたは複数の論理演算の結果を表します。
2 進の算術演算子および関係演算子では、次のように処理されます。
一方の演算対象がブール型の場合は、そのまま演算が実行されます。
両方の演算対象がブール型の場合は、両者を整数であるとみなして演算が実行されます。
ユーザー定義の関数によってブール型の結果を生成することはできません。ただし、一部の (標準でない) 組み込み関数では可能です。
ブール型と論理型には、次のような相違点があります。
変数、配列、関数は論理型にできますが、ブール型にすることはできません。
LOGICAL 文はありますが、 BOOLEAN 文はありません。
論理型の変数、定数、または式は、2 つの値 .TRUE. または .FALSE. だけしか表しません。ブール型の変数、定数、または式は、任意のバイナリ値を表すことができます。
論理要素は、算式、関係式、またはビット単位の論理式において無効です。ブール要素はいずれにおいても有効です。
f95 では、ブール型定数 (8 進、16 進、ホレリス) を、次のような書式 (2 進ではありません) で使用することができます。ただし変数はブール型として宣言できません。標準の Fortran では、このような書式は許されていません。
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 進数であることを表します。
X'ddd' または X"ddd"、d が任意の 16 進数である の書式です。
1 桁から 8 桁までの 16 進数 (0 から 9、A から F) を使用できます。
文字は大文字でも小文字でもかまいません (X、x、A から F、a から f)。
数字は引用符 (アポストロフィ) または二重引用符で囲む必要があります。
空白は無視されます。
16 進数の始めに + か - の記号を付けてもかまいません。
8 桁の 16 進数は 32 ビットの完全なワードを表しています。この 32 ビットワードの各ビットの内容は、同じ値を表す 2 進数に対応しています。
8 桁未満の場合は、値は右揃えになります。ワードの右端にある n ビットから 31 ビットまでが使用され、それ以外のビットは 0 になります。
ホレリスデータには、次の書式を使用できます。
nH… |
'…'H |
"…"H |
nL… |
'…'L |
"…"L |
nR… |
'…'R |
"…"R |
前述の「…」は文字列を表し、n は文字数を表します。
例: 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 進数の定数を使用すると、結果が未定義になることがあります。ただし、構文エラーにはなりません。
f95 では、DATA 文以外の場所で BOZ 定数を使用することができます。
B’bbb’ |
O’ooo’ |
Z’zzz’ |
B"bbb" |
O"ooo" |
Z"zzz" |
このような BOZ 定数が実数変数に代入されている場合には、型は変換されません。
標準の Fortran では、BOZ 定数は DATA 文でのみ使用できます。