如何从一个Fortran整数转换为一个较小的整数?

问题描述 投票:1回答:2

我需要在Fortran中将参数从integer(kind=8)转换为integer(kind=4),有没有(简单)方法这样做?

此参数是一个输入数字,如果此数字大于2 ^ 31-1(4字节整数的限制),程序将始终要求一个较小的数字(因此它可以“适合”在这4个字节内),所以我认为这应该不是问题。

fortran integer converter gfortran
2个回答
1
投票

要创建任何类型的整数使用

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)


0
投票

正如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
© www.soinside.com 2019 - 2024. All rights reserved.