f95 支持布尔类型的常量和表达式。但是,没有布尔变量或数组,也没有布尔类型语句。
对于屏蔽操作,按位逻辑表达式具有布尔结果;它的每个位都是对相应操作数位进行一个或多个逻辑运算的结果。
用于二进制算术运算符和关系运算符:
如果一个操作数是布尔型,则在执行运算时不进行转换。
如果两个操作数均是布尔型,则在执行运算时就当它们是整数一样。
用户指定的函数均不能生成布尔结果,但某些(非标准的)内部函数可以。
布尔和逻辑类型具有以下差异:
变量、数组和函数可以是逻辑类型,但它们不能是布尔类型。
可以使用 LOGICAL 语句,但不能使用 BOOLEAN 语句。
逻辑型的变量、常量或表达式仅有两个值:.TRUE. 或 .FALSE.。布尔型的变量、常量或表达式可以表示任意二进制值。
逻辑型实体在算术表达式、关系表达式或按位逻辑表达式中无效。布尔型实体在所有 3 种表达式中都有效。
f95 允许使用以下替代格式(没有二进制)的布尔常量(八进制、十六进制或霍尔瑞斯)。不能将变量声明为布尔型。标准 Fortran 不允许使用这些格式。
可以使用字母 B 或 b。
可以是 1 至 11 个八进制数字(0 至 7)。
11 个八进制数字表示完整的 32 位字,最左侧的数字可以是 0、1、2 或 3。
每个八进制数字指定 3 位的值。
最后一个(最右侧的)数字指定最右侧 3 位(位 29、30 和 31)的内容。
如果位数不足 11 个,则该值右对齐,即它表示字最右侧的位:位 n 至 31。其他位为 0。
忽略空格。
在 I/O 格式规范中,字母 B 表示二进制数字;而在其他地方则表示八进制数字。
X’ddd’ 或 X"ddd ",其中 d 是任意十六进制数字
可以包含 1 至 8 个十六进制数字(0 至 9,A-F)。
任何字母既可以是大写也可以是小写(X、x、A-F、a-f)。
数字必须用撇号或引号括起来。
忽略空格。
十六进制数字可以以 + 或 - 符号开头。
8 个十六进制数字表示一个完整的 32 位字,等效的二进制数字对应于 32 位字中每个位的内容。
如果位数不足 8 个,则该值右对齐,即它表示字最右侧的位:位 n 至 31。其他位为 0。
接受的霍尔瑞斯数据格式为:
nH… |
’…’H |
"…"H |
nL… |
’…’L |
"…"L |
nR… |
’…’R |
"…"R |
上面的 "…" 是字符串,n 是字符数。
示例: 八进制和十六进制常量。
布尔常量 |
32 位字的内部八进制数 |
---|---|
0B |
00000000000 |
77740B |
00000077740 |
X"ABE" |
00000005276 |
X"-340" |
37777776300 |
X’1 2 3’ |
00000000443 |
X’FFFFFFFFFFFFFFFF’ |
37777777777 |
示例: 赋值语句中的八进制和十六进制数。
i = 1357B j = X"28FF" k = X’-5A’ |
在算术表达式中使用八进制或十六进制常量可产生未定义的结果,并且不会生成语法错误。
f95 允许在非 DATA 语句中使用 BOZ 常量。
B’bbb’ |
O’ooo’ |
Z’zzz’ |
B"bbb" |
O"ooo" |
Z"zzz" |
如果将它们赋值给实数变量,则不进行类型转换。
标准 Fortran 只允许在 DATA 语句中使用它们。