我不明白,因为逻辑类型只有两种情况:true
和false
,那么为什么在Fortran中我们需要logical(1)
,logical(2)
,logical(4)
和logical(8)
呢?
我们只需要1 bit
。
有人可以解释一下吗?
最佳答案
首先,Fortran并没有说我们有分别占用1、2、4和8个字节的逻辑类型,它们肯定不是logical(1)
,logical(2)
,logical(4)
和logical(8)
。一个实现可以选择提供这些名称,将其称为这些名称。
逻辑变量的确可以只有两个值。从(F90,尽管F2008在不同的地方说的相同)标准4.3.2.2:
[这里强调,以后逐字记录。]
对于默认类型的逻辑类型,存储关联规则(14.6.3.1)表示:
因此,编译器必须提供与整数和实数类型相同大小的逻辑类型,但同样,它可以提供占用1位,1个字节或任何其他形式的表示形式。对于任何给定的表示形式,种类数和大小(因此,我的第一段:这个问题并非普遍有效)是特定于实现的。就是说,没有SELECTED_LOGICAL_KIND
(或类似的内在函数)。
至于为什么多种表示形式有用的原因,归结为提供选择的机会,也许是针对特殊情况,例如阵列和理想的内存管理(有些人喜欢玩非便携式的技巧)。但是,内存访问/对齐要求建议标量逻辑至少应为一个字节(或填充使其相同)。对于C互操作性(F2003 +),存在一种与伴随C处理器的C_BOOL
对应的_Bool
,它的大小不必相同。
关于fortran - 为什么我们需要1,2,4,8个字节将逻辑变量存储在fortran中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22125504/