Oracle Solaris Studio 12.2:Fortran 用户指南

4.2 数据类型

本节介绍 Fortran 数据类型的功能和扩展。

4.2.1 布尔类型

f95 支持布尔类型的常量和表达式。但是,没有布尔变量或数组,也没有布尔类型语句。

4.2.1.1 控制布尔类型的各种规则

4.2.1.2 布尔常量的替代格式

f95 允许使用以下替代格式(没有二进制)的布尔常量(八进制、十六进制或霍尔瑞斯)。不能将变量声明为布尔型。标准 Fortran 不允许使用这些格式。

八进制

ddddddB,其中 d 是任意八进制数字

在 I/O 格式规范中,字母 B 表示二进制数字;而在其他地方则表示八进制数字。

十六进制

X’dddX"ddd ",其中 d 是任意十六进制数字

霍尔瑞斯

接受的霍尔瑞斯数据格式为:

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’

在算术表达式中使用八进制或十六进制常量可产生未定义的结果,并且不会生成语法错误。

4.2.1.3 布尔常量的替代上下文

f95 允许在非 DATA 语句中使用 BOZ 常量。

Bbbb

Oooo

Zzzz

B"bbb"

O"ooo"

Z"zzz"

如果将它们赋值给实数变量,则不进行类型转换。

标准 Fortran 只允许在 DATA 语句中使用它们。

4.2.2 数值数据类型的缩写大小表示法

f95 允许在声明语句、函数语句和 IMPLICIT 语句中使用以下非标准的类型声明格式。第一列中的格式虽然已被广泛使用,但它们是非标准的 Fortran 格式。第二列中的种类数字可能会因供应商不同而异。

表 4–2 数值数据类型的大小表示法

非标准 

声明符 

简短形式 

含义 

INTEGER*1

INTEGER(KIND=1)

INTEGER(1)

有符号的单字节整数 

INTEGER*2

INTEGER(KIND=2)

INTEGER(2)

有符号的双字节整数 

INTEGER*4

INTEGER(KIND=4)

INTEGER(4)

有符号的 4 字节整数 

LOGICAL*1

LOGICAL(KIND=1)

LOGICAL(1)

单字节逻辑值 

LOGICAL*2

LOGICAL(KIND=2)

LOGICAL(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 四精度 16 字节浮点值 

COMPLEX*8

COMPLEX(KIND=4)

COMPLEX(4)

单精度复数(每个部分 4 个字节) 

COMPLEX*16

COMPLEX(KIND=8)

COMPLEX(8)

双精度复数(每个部分 8 个字节) 

COMPLEX*32

COMPLEX(KIND=16)

COMPLEX(16)

四精度复数(每个部分 16 个字节) 

4.2.3 数据类型的大小和对齐

存储和对齐始终以字节为单位。可以划分为单字节的值按字节对齐。

类型的大小和对齐取决于各种编译器选项和平台以及变量的声明方式。COMMON 块中的缺省最大对齐位置是 4 字节边界。

使用特殊选项(如 -aligncommon-f-dalign-dbl_align_all- xmemalign- xtypemap)进行编译,可以更改缺省的数据对齐和存储分配。本手册中的缺省描述假定这些选项无效。

Fortran 编程指南》提供了有关某些平台上数据类型和对齐方式特例的其他信息。

下表汇总了缺省的大小和对齐,并忽略类型和选项的其他方面。

表 4–3 缺省的数据大小和对齐(以字节为单位)

Fortran 数据类型 

大小 

缺省对齐 

COMMON 中的对齐  

BYTE X

CHARACTER X

CHARACTER*n X

COMPLEX X

COMPLEX*8 X

DOUBLE COMPLEX X

COMPLEX*16 X

COMPLEX*32 X

16 

16 

32 

8/16 

DOUBLE PRECISION X

REAL X

REAL*4 X

REAL*8 X

REAL*16 X

16 

8/16 

INTEGER X

INTEGER*2 X

INTEGER*4 X

INTEGER*8 X

LOGICAL X

LOGICAL*1 X

LOGICAL*2 X

LOGICAL*4 X

LOGICAL*8 X

请注意以下事项:

选项 -f-dalign 可强制将所有 8、16 或 32 字节数据与 8 字节边界对齐。选项 -dbl_align_all 可使所有数据与 8 字节边界对齐。如果程序依赖于这些选项的使用,则可能无法进行移植。