如何从一个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: 输

c#如何将2D数组拆分为较小的2D数组(块)列表?

int 或 NSInteger 到 NSUInteger 用于索引

确定内存中的 Fortran 派生类型大小

输入两个正整数m和n,求其最大公约数和最小公倍数

写一个方法,求两个数的最大公约数和最小公倍数。