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.
为什么每种类型的每个最大整数都相同:2147483647
?并且是否存在最小整数的内在函数?
在调用子程序时如何保留整数种类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)