Fortran内置函数Transfer
12/03
本文最后更新于
2024年12月03日,已超过
88天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
Transfer是Fortran一个偏底层的内置函数,其功能类似C语言中Type Casting(类型转换)。
// C type casting
void *ptr = NULL;
itn *p = (int *)ptr;
Transfer类型转换与一般的数值类型转换(比如浮点数转换为整数)不同,其转换过程中保持底层二进制位表示不变。
函数语法:
RESULT = TRANSFER(SOURCE, MOLD[, SIZE])
其中SOURCE是要转换变量,可以是任何类型的标量或者数组。MOLD是希望转换的类型,可以是任何类型的标量或者数组,一般会设置成RESULT变量。
示例:
program main
implicit none
integer :: a
real :: b
character :: c
a = 48
b = transfer(a,b)
c = transfer(a,c)
print*, 'tranfer(1) into real is ',b
print*, 'tranfer(1) into character is ',c
end
执行程序:
$ ifort intrinc_transfer.f90
$ ./a.out
tranfer(1) into real is 6.7262326E-44
tranfer(1) into character is 0
整数48的二进制位表示为b'110000'
,该二进制位表示如果被当做单精度浮点类型解释的话,其浮点值结果如下图所示。
可以看出格式化输出值6.7262326E-44
是实际浮点值的近似值,8位有效数字。
同时,整数48的二进制位表示恰好是字符类型值0
的表示(见ASCII表),这就是为何转换成字符类型c的值是0
。
工具

