4. Solaris Studio Fortran 的功能与差异
4.3.3 声明 Cray 指针和 Fortran 95 指针
4.4 STRUCTURE 和 UNION (VAX Fortran)
4.6.11 Fortran 2003 FLUSH I/O 语句
4.6.12 Fortran 2003 POINTER INTENT 功能
4.6.13 Fortran 2003 中增强的数组构造函数
4.6.14 Fortran 2003 和 Fortran 2008 的其他功能
本节介绍 Fortran 数据类型的功能和扩展。
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。
接受的霍尔瑞斯数据格式为:
|
上面的 "…" 是字符串,n 是字符数。
示例: 八进制和十六进制常量。
|
示例: 赋值语句中的八进制和十六进制数。
i = 1357B j = X"28FF" k = X’-5A’
在算术表达式中使用八进制或十六进制常量可产生未定义的结果,并且不会生成语法错误。
f95 允许在非 DATA 语句中使用 BOZ 常量。
|
如果将它们赋值给实数变量,则不进行类型转换。
标准 Fortran 只允许在 DATA 语句中使用它们。
f95 允许在声明语句、函数语句和 IMPLICIT 语句中使用以下非标准的类型声明格式。第一列中的格式虽然已被广泛使用,但它们是非标准的 Fortran 格式。第二列中的种类数字可能会因供应商不同而异。
表 4-2 数值数据类型的大小表示法
|
存储和对齐始终以字节为单位。可以划分为单字节的值按字节对齐。
类型的大小和对齐取决于各种编译器选项和平台以及变量的声明方式。COMMON 块中的缺省最大对齐位置是 4 字节边界。
使用特殊选项(如 -aligncommon、-f、-dalign、-dbl_align_all、- xmemalign 和 - xtypemap)进行编译,可以更改缺省的数据对齐和存储分配。本手册中的缺省描述假定这些选项无效。
《Fortran 编程指南》提供了有关某些平台上数据类型和对齐方式特例的其他信息。
下表汇总了缺省的大小和对齐,并忽略类型和选项的其他方面。
表 4-3 缺省的数据大小和对齐(以字节为单位)
|
请注意以下事项:
REAL*16 和 COMPLEX*32:在 64 位环境(使用 -m64 进行编译)中,缺省对齐位置是 16 字节(而非 8 字节)边界,如表中 8/16 所示。该数据类型通常称为四精度。
数组和结构按照其元素或字段对齐。数组对齐方式与数组元素相同。结构对齐方式与具有最宽对齐的字段相同。
选项 -f 或 -dalign 可强制将所有 8、16 或 32 字节数据与 8 字节边界对齐。选项 -dbl_align_all 可使所有数据与 8 字节边界对齐。如果程序依赖于这些选项的使用,则可能无法进行移植。