Fortran:最大和最小的整数

ech*_*cho 11 fortran fortran95

Fortran对我来说是全新的,有人可以帮我解决以下问题吗?我想知道我的电脑上每种类型的所有整数类型数字以及最大和最小值.我的代码如下:

program intkind
implicit none

integer :: n=1
integer :: integer_range =1


do while(integer_range /= -1)
    print*, "kind_number ", selected_int_kind(n)
    call rang(integer_range)
    n = n *2
    integer_range = selected_int_kind(n)
end do

contains
subroutine rang(largest) 
    integer largest
    print*, huge(largest)

end subroutine

end 
Run Code Online (Sandbox Code Playgroud)

我得到的整数类型数字是:1,2,4,8.

  1. 为什么每种类型的每个最大整数都相同:2147483647?并且是否存在最小整数的内在函数?

  2. 在调用子程序时如何保留整数种类rang?我认为这是最大整数的关键.

Jon*_*rsi 16

你的子程序:

subroutine rang(largest) 
    integer :: largest
    print *, huge(largest)
end subroutine
Run Code Online (Sandbox Code Playgroud)

将默认大小的整数作为输入,并输出适合该默认大小的整数的最大可能值.它将始终返回巨大的(默认整数),在大多数系统上,它是巨大的(4字节整数)或2147483647. huge仅考虑变量类型; 它不以任何方式解释变量.您可以执行上面尝试的唯一方法是使用参数化派生类型,这些类型足够新,在编译器中支持它仍然有点不稳定.

如果你想看看不同的INTINTER的KIND范围,你将不得不使用不同的变量:

program integerkinds
    use iso_fortran_env
    implicit none

    integer :: i
    integer(kind=int8)  :: i8
    integer(kind=int16) :: i16
    integer(kind=int32) :: i32
    integer(kind=int64) :: i64

    integer(kind=selected_int_kind(6)) :: j6
    integer(kind=selected_int_kind(15)):: j15

    print *,'Default:'
    print *, huge(i)
    print *,'Int8:'
    print *, huge(i8)
    print *,'Int16:'
    print *, huge(i16)
    print *,'Int32:'
    print *, huge(i32)
    print *,'Int64:'
    print *, huge(i64)

    print *,''

    print *,'Selected Integer Kind 6:'
    print *, huge(j6)

    print *,'Selected Integer Kind 15:'
    print *, huge(j15)

end program integerkinds
Run Code Online (Sandbox Code Playgroud)

跑步给出:

$ ./intkinds
 Default:
  2147483647
 Int8:
  127
 Int16:
  32767
 Int32:
  2147483647
 Int64:
  9223372036854775807

 Selected Integer Kind 6:
  2147483647
 Selected Integer Kind 15:
  9223372036854775807
Run Code Online (Sandbox Code Playgroud)