首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在现代Fortran中实现位数组?

如何在现代Fortran中实现位数组?
EN

Stack Overflow用户
提问于 2013-01-04 01:09:13
回答 3查看 1.9K关注 0票数 2

我是Fortran 2008的新手,正在尝试实现Atkin的筛子。在C++中,我使用std::bitset实现了这一点,但在Fortran2008中找不到任何用于此目的的东西。

有没有人可以给我一些示例代码或者解释一下其中一个的实现策略?

EN

回答 3

Stack Overflow用户

发布于 2013-01-04 01:32:52

Standard Fortran没有我所理解的std:bitset的精确类比--尽管我承认我的理解可能是有缺陷的。一般来说,如果你想坚持使用标准的Fortran,你可以使用整数作为位集。如果一个整数的位数不足以满足您的需要,请使用整数数组。这确实意味着,跟踪比特集中的第307位的责任落在了您身上。

在2008标准之前,您可以使用bit_sizeiandibsetbtest等函数进行位操作(请参阅您的编译器文档或谷歌获取语言参考,或尝试使用the Intel Fortran documentation)。

如果您不熟悉Fortran的boz字面量,那么请熟悉它们。例如,您可以使用如下语句设置整数的位

代码语言:javascript
复制
integer :: mybits
...
mybits = b'00000011000000100000000000001111'

使用b edit descriptor,你也可以读写二进制文字。例如,语句

代码语言:javascript
复制
write(*,*) mybits
write(*,'(b32.32)') mybits

将产生输出

代码语言:javascript
复制
    50462735
00000011000000100000000000001111

如果你能找到一个足够现代的编译器,那么你会发现2008年的标准增加了一些新的功能,比如bgebgtdshiftliall等等。它们是为整数数组或整数的输入参数定义的,但我没有任何使用它们传递的经验。

这应该足以让您入门了。

票数 3
EN

Stack Overflow用户

发布于 2015-04-30 10:12:18

Fortran具有用于操作缺省整数位的位内部函数。位数组很容易在此基础上构建……

确定需要多少位,除以缺省整数中的位数,分配一个默认大小的整数数组,如果除法的模非零,则分配+1的大小,基本上就完成了。Metcalf和Reid中很好地介绍了bit的本质。

票数 0
EN

Stack Overflow用户

发布于 2018-02-12 22:06:35

您需要的内容可能如下所示:

代码语言:javascript
复制
program test
logical,allocatable:: flips(:)
...
allocate(flips(ntris),status=err)
call tris(ntris,...,flips)
...
end
subroutine tris(nnewtris, ...,flips)
logical flips(nnewtris)
...
if(flips(i)) then
...
end if
return
end
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14143677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档