为什么我们需要1,2,4,8个字节来存储fortran中的逻辑变量?

use*_*964 9 fortran fortran90

我不明白,既然逻辑类型只有两个情况:truefalse,那么为什么我们需要logical(1),logical(2),logical(4),logical(8)Fortran中?

我们只需要1 bit.

有人可以解释一下吗?

fra*_*lus 9

首先,Fortran的说,我们有逻辑类型占用每1,2,4和8字节,他们肯定不是logical(1),logical(2),logical(4),和logical(8).实现可以选择提供那些,称之为名称.

逻辑变量实际上只能是两个值.从(F90,尽管F2008在不同的地方说的相同)标准4.3.2.2:

逻辑类型有两个值代表真假.

处理器必须为逻辑类型的数据提供一种或多种表示方法.每一个这样的方法的特征在于通过对被称为一个类型参数的值种类类型参数.

[重点在这里,后来逐字逐句.]

对于逻辑类型的默认类型,存储关联规则(14.6.3.1)表示:

(1)默认整数,默认实数或默认逻辑类型的非指针标量对象占用单个数字存储单元.
(5)类型为[..] nondefault logical [..]的非指针标量对象占用一个未指定的存储单元,每个情况都不同.

因此,编译器必须提供与整数和实数类型相同大小的逻辑类型,但同样地,它可以提供占用1位,1字节或其他类型的表示.任何给定表示的类型和大小(因此我的第一段:问题不是普遍有效的)是特定于实现的.也就是说,没有SELECTED_LOGICAL_KIND(或这样)固有的.

至于为什么多个表示可能有用,这可以归结为提供选择,也许是针对特殊情况,例如阵列和理想的内存管理(有些人喜欢玩非便携式技巧).但是,内存访问/对齐要求表明标量逻辑至少应为一个字节(或填充使其相同).对于C互操作性(F2003 +),有一种C_BOOL对应于伴随C处理器的类型_Bool,它们不需要具有相同的大小.