Adr*_*ins 0 memory fortran bits
我有一个内存关键的FORTRAN程序,它目前使用两个整数数组,第一个使用4个BYTES整数,第二个使用1个BYTE整数.
两个数组都没有"完全"使用,即我知道存储在4字节数组中的数字不会超过一百万左右(所以我需要超过2个字节,但我没有使用4个字节的所有位)同样我只使用2位的1字节数组作为"标志".
为了节省内存,我想尝试将两者结合起来,即使用4字节数组的最左边两位来存储2个标志.
现在我知道如果我首先设置INTEGER值,我可以随后使用IBSET/IBCLR设置标志,并且仍然使用IBITS函数安全地提取我的整数以提取最右边的X位(在这种情况下X = 28):
integer(kind=4) :: imark,inum
imark=600245 ! example number
! use bits 29 and 30 to store flags...
imark=IBSET(imark,29)
imark=IBSET(imark,30)
print *,imark ! gives 1611212981
! extract right most bits:
inum=IBITS(imark,0,28)
print *,inum ! gives back 600245 as desired.
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何修改整数,同时保留标志的内存.换句话说,我需要与 IBITS 相反的功能,复制一个只分配最右边X位的整数.
显然,如果我分配一个新的整数值(imark = 343525),它将重置标志位.我可以编写一个函数,一次循环一个新整数值的最右边X位,然后在我的4字节数组中使用IBSET/IBCLR设置它们,但这看起来非常冗长.但我没有找到执行此任务的任何内在功能.
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |