如何从一个Fortran整数转换为一个较小的整数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从一个Fortran整数转换为一个较小的整数?相关的知识,希望对你有一定的参考价值。
我需要在Fortran中将参数从integer(kind=8)
转换为integer(kind=4)
,有没有(简单)方法这样做?
此参数是一个输入数字,如果此数字大于2 ^ 31-1(4字节整数的限制),程序将始终要求一个较小的数字(因此它可以“适合”在这4个字节内),所以我认为这应该不是问题。
要创建任何类型的整数使用
result = int(source, kind=result_kind)
所以你可以做到
result = int(source, 4)
source
可以是任何数字,包括任何类型的整数。
请注意,kind=8
不代表8个字节,kind=4
不代表4个字节。有些编译器根本没有4类和8类。这些号码不便携。不要使用它们。有关详细信息,请参阅Fortran: integer*4 vs integer(4) vs integer(kind=4)。
正如Vladimir F's answer指出的那样,内在函数int
返回所需类型int(i,kind=kind)
的整数值。
当需要某种表达式时(例如在过程参数列表中),这非常有用:
call sub_with_int_i1_arg(INT(int_i2, kind=i1))
但是,如果需要,对整数的内部赋值已经提供了转换:
integer, parameter :: kind1=7, kind2=23
integer(kind1) :: i
integer(kind2) :: j = 85
! The intrinsic assignment
i = j
! is equivalent to
i = INT(j,KIND(i))
! which here is also
i = INT(j,kind1)
end
内在的huge
可能有助于确定i
的范围是否足够大:
if (ABS(j).le.HUGE(i)) then
i = j
else
error stop "Oh noes :("
end if
正如Steve Lionel评论的那样,提议的新Fortran规范引入了内部函数out_of_range
,它也测试了这样的情况:
if (.not.OUT_OF_RANGE(j,i)) then
i = j
else
error stop "Oh noes :("
end if
以上是关于如何从一个Fortran整数转换为一个较小的整数?的主要内容,如果未能解决你的问题,请参考以下文章
2022-02-17:寻找最近的回文数。 给定一个表示整数的字符串 n ,返回与它最近的回文整数(不包括自身)。如果不止一个,返回较小的那个。 “最近的”定义为两个整数差的绝对值最小。 示例 1: 输