TRANSFER
copyright

green dotTRANSFER

書式 TRANSFER(SOURCE,MOLD[,SIZE])
機能 物理表現(メモリに記憶されている形式)は、SOURCEと同じであるが 型および種別型パラメタをMOLDに変換する。
 (1)結果の物理表現の長さがSOURCEと同じとき、結果の物理表現は、 SOURCEのものとする。結果の物理表現のほうがSOURCEよりも長いとき、 物理表現の先頭部分は、SOURCEのものとし、残りの部分は不定とする。
 (2)結果の物理表現のほうがSOURCEよりも短いとき、 結果の物理表現は、SOURCEの先頭部分とする。
 (3)SIZEを省略した場合でMOLDがスカラであるとき、結果はスカラとし、 MOLDが配列であるとき、結果は1次元配列とする。配列の大きさは、 物理表現がSOURCEのものよりも短くならない範囲で可能な限り小さくする。
 (4)SIZE0を指定した場合、結果は大きさがSIZEである1次元配列とする。
引数
SOURCE :任意の型でスカラまたは配列
MOLD :任意の型でスカラまたは配列
SIZE
(省略可能)
:整数型スカラ
戻り値 型、種別型パラメタは引数MOLDと同じである。

green dotサンプルプログラム1

整数1094861636の物理表現を変えないで文字と実数に変換する。
整数1094861636の物理表現(表1「整数の数体系」の例による形式)は 以下のようになる。 00100001 00100010 00100011 00100100
 上記の物理表現を文字で表すと'ABCD'になり、実数で表すと 12.14142227になる。 ただし、文字はASCII大小順序に基づいているものとする。
    INTEGER          :: i
    REAL             :: x
    CHARACTER(LEN=4) :: c
    i=1094861636
    WRITE(*,*) TRANSFER(i,c)    ! 文字に変換する
    WRITE(*,*) TRANSFER(i,x)    ! 実数に変換する

実行例
ABCD 12.14142227

green dotサンプルプログラム2

配列aに入っている実数を物理表現bに変換する。bは複素数なので配列aは 複素数になる。
    REAL,DIMENSION(5)    :: a
    COMPLEX,DIMENSION(2) :: b
    a=(/3.0, 4.0, 5.0, 6.0, 7.0/)
    b=TRANSFER(a,b,2)
    WRITE(*,*) b

実行例
  (3.00000…,4.00000…) (5.00000…,6.00000…)

(表1)整数の数体系
hyou1 r2以上の整数
q正の整数
wk0以上r未満
s+1または-1

line-end