fortran fortran中文资料网
手气不错
Article

063.selectedIntKind_SELECTED_INT_KIND

2026年10月22日基础级

selected_int_kind(r)按所需十进制整数范围选择可用的最小integer kind,使该kind至少能表示-10^r到10^r之间的全部整数。

可以用于计数器、网格编号和大规模粒子数量。适合按范围需求声明整数,应当检查负返回值避免把不受支持的结果继续当作kind使用。

语法结构

integer, parameter :: ik = selected_int_kind(r)
integer(kind=ik) :: value
value = integer_literal_ik
  • r是标量整数,表示所需十进制范围,而不是字节数。
  • 若存在多个满足要求的integer kind,返回十进制范围最小的一个;若没有任何kind满足,返回负值。
  • 超出默认整数范围的字面量也要带目标kind后缀,否则编译器可能在赋值前就按默认整数解析失败。

本文代码

program selectedIntKindDemo
  implicit none
  integer, parameter :: idKind = selected_int_kind(9)
  integer, parameter :: populationKind = selected_int_kind(12)
  integer, parameter :: unavailableKind = selected_int_kind(100)
  integer(kind=populationKind) :: particleCount
  particleCount = 8000000000_populationKind
  print "(A,I0)", "至少9位整数的kind:", idKind
  print "(A,I0)", "至少12位整数的kind:", populationKind
  print "(A,I0)", "粒子数:", particleCount
  print "(A,I0)", "该kind可表示的最大整数:", huge(particleCount)
  print "(A,I0)", "要求100位时的返回值:", unavailableKind
end program selectedIntKindDemo

编译运行

(base) hong@hongdeMacBook-Pro 063.selectedIntKind % gfortran -Wall -Wextra -std=f2018 exampleSelectedIntKind.f90 -o selectedIntKindDemo
(base) hong@hongdeMacBook-Pro 063.selectedIntKind % ./selectedIntKindDemo
至少9位整数的kind:4
至少12位整数的kind:8
粒子数:8000000000
该kind可表示的最大整数:9223372036854775807
要求100位时的返回值:-1

现象分析

本机kind=4已满足9位十进制范围,12位需求则选择kind=8。粒子数8,000,000,000超过常见32位有符号整数上限,因此使用populationKind声明并给字面量添加后缀。

huge(particleCount)得到9,223,372,036,854,775,807,证明所选kind覆盖12位需求。具体kind标签4和8仍由编译器决定。

selected_int_kind(100)返回-1,表示当前处理器没有满足100位范围的整数kind。负返回值只能用于检测,不用于integer(kind=…)声明。

核心知识点

  • selected_int_kind按十进制范围需求选择integer kind。
  • 返回的正kind标签不可硬编码;负值表示没有可用kind。
  • 大整数字面量必须在解析时就带正确kind后缀。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注